1. 什么是"类"和"对象"?

🏠 类比——户型图 vs 房子:
类 = 户型图(设计图纸:有几间房、多大面积——只是"设计",不是实体)
对象 = 按图纸盖出来的房子(真实存在,可以住人)
一张户型图可以盖无数套房子(一个类可以 new 无数个对象),每套房子可以装修不同(每个对象属性值不同)。

类的组成:

定义一个类 + 创建对象(完整示例)
// Student.java —— 定义"学生"这个类(户型图)
public class Student {
    String name;        // 属性:姓名
    int age;            // 属性:年龄

    void study() {                   // 方法:学习
        System.out.println(name + " 正在学习");
    }
}

// Main.java —— 使用(盖房子)
public class Main {
    public static void main(String[] args) {
        Student s1 = new Student();   // new = 盖一套房子(创建对象)
        s1.name = "小明";              // 给属性赋值
        s1.age = 18;
        s1.study();                        // 调用对象的方法

        Student s2 = new Student();   // 再盖一套(独立的对象)
        s2.name = "小红";
    }
}
小明 正在学习

🎯 核心认知

  • 类 = 模板(设计),对象 = 实例(实体),new 关键字创建对象
  • 对象之间互不影响:s1.name 和 s2.name 是两码事
  • 访问:对象.属性、对象.方法(点号访问)
  • String、数组、集合都是类——你一直在用对象,只是现在才明白

2. 什么是构造器(构造方法)?

构造器:创建对象时自动执行的特殊方法,用来"初始化"(给属性赋初始值)。特点:

构造器示例
public class Student {
    String name;
    int age;

    // 无参构造器(可以省略不写,Java 默认有)
    Student() { }

    // 有参构造器:创建时直接传值(推荐)
    Student(String name, int age) {
        this.name = name;      // this 表示"当前这个对象"
        this.age = age;        // 区分"参数 age"和"属性 age"
    }
}

// 使用:
Student s = new Student("小明", 18);   // 一步到位,不用再手动赋值

🎯 注意

  • this 关键字 = "当前对象自己"(参数和属性重名时必须有它)
  • 写了有参构造器后,无参构造器不再自动提供——需要的话要自己写
  • 构造器可以重载(多个版本,参数不同)

3. 什么是封装?private 和 getter/setter?

问题:直接 s.age = -100 怎么办?数据没校验就被写进去了。属性应该是"受保护的"。

封装:把属性设为 private(私有),外部不能直接访问,只能通过公共方法(getter/setter)操作——在方法里加校验。

标准封装写法(JavaBean 规范)
public class Student {
    private String name;     // private:只有本类内部能访问
    private int age;

    // getter:读属性
    public String getName() { return name; }

    // setter:写属性(可以加校验!)
    public void setAge(int age) {
        if (age < 0 || age > 150) {
            throw new IllegalArgumentException("年龄不合法");
        }
        this.age = age;
    }

    public int getAge() { return age; }
}

// 使用:
Student s = new Student();
s.setAge(18);      // ✅ 走校验
// s.age = 18;     ❌ 编译报错:age 是 private,访问不了

🎯 必记

  • private = 私有(本类可见);public = 公开(谁都可见)——两个最常用访问修饰符
  • 封装的好处:数据安全(校验)、可维护(改内部实现不影响外部)、隐藏细节
  • IDEA 一键生成:右键 → Generate → Getter and Setter

4. 继承和多态先混个脸熟?

继承(extends):子类"是"父类的一种,自动拥有父类的属性和方法(除 private)。

多态:父类类型引用子类对象,调用同一方法表现出不同行为。

继承 + 多态预览
class Animal { void speak() { System.out.println("..."); } }

class Dog extends Animal {
    @Override void speak() { System.out.println("汪汪"); }   // 重写父类方法
}
class Cat extends Animal {
    @Override void speak() { System.out.println("喵喵"); }
}

// 多态:父类引用,子类行为
Animal a = new Dog();
a.speak();     // 汪汪
a = new Cat();
a.speak();     // 喵喵

这节先"混脸熟",深入理解去 java-basics 模块的面向对象页。

✍️ 练习题

  • 1. 定义一个"手机"类:属性(品牌、价格),方法(call、playMusic),创建两个手机对象
  • 2. 给手机类写有参构造器 + getter/setter(价格 setter 里校验 ≥ 0)
  • 3. 定义一个"银行账户"类:余额私有,提供 deposit(存钱)/withdraw(取钱,余额不足报错)/getBalance
  • 4. 思考:为什么 Java 程序都要从"类"开始写?(因为 Java 是面向对象语言,代码必须写在类里;但 Java 保留了 8 种基本类型和静态成员,并不是"纯"面向对象(Smalltalk / Ruby 才是))
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。