跳转至

类与对象

类是对象的模板,定义了对象的属性和行为;对象是类的实例,具有具体的状态和行为。理解类与对象是学习面向对象编程的第一步。

作用

面向对象编程通过类和对象的概念,使代码更加模块化、可重用和易于维护。它模拟了现实世界中的实体和关系,使程序更接近人类的思维方式。掌握类与对象的概念,将为后续学习封装、继承和多态打下基础。

图表说明

graph LR
    OOP[面向对象编程] --> Class[类与对象]
    OOP --> Features[三大特性]

    Class --> Define["📦 类定义
    public class Car {
        // 属性
        // 方法
    }"]
    Class --> Instance["🔄 对象实例化
    Car myCar = new Car();"]

    Features --> Encapsulation["🔒 封装
    - private修饰属性
    - public getter/setter"]
    Features --> Inheritance["🎁 继承
    - extends关键字
    - super调用父类
    - 方法重写"]
    Features --> Polymorphism["🎭 多态
    - 方法重载
    - 父类引用指向子类对象
    - 接口实现"]

    Define --> Attribute["属性
    String color;
    int speed;"]
    Define --> Method["方法
    void run() {
        // 实现
    }"]

    Encapsulation --> AccessControl["访问控制
    public > protected > 默认 > private"]
    Inheritance --> Override["方法重写规则
    1. 相同方法名和参数
    2. 返回值类型相同或子类
    3. 访问权限不能更严格"]
    Polymorphism --> Interface["接口多态
    interface Drivable {
        void drive();
    }"]

例子

public class ClassObjectDemo {
    public static void main(String[] args) {
        // 创建对象
        Car myCar = new Car("Toyota", "Red");

        // 访问属性
        System.out.println("品牌: " + myCar.getBrand());
        System.out.println("颜色: " + myCar.getColor());

        // 调用方法
        myCar.accelerate(30);
        System.out.println("当前速度: " + myCar.getSpeed());

        myCar.brake(10);
        System.out.println("刹车后速度: " + myCar.getSpeed());

        // 对象比较
        Car anotherCar = new Car("Toyota", "Red");
        System.out.println("相同品牌颜色: " + myCar.equals(anotherCar));
    }
}

class Car {
    // 成员变量
    private String brand;
    private String color;
    private int speed;

    // 构造方法
    public Car(String brand, String color) {
        this.brand = brand;
        this.color = color;
        this.speed = 0;
    }

    // 成员方法
    public void accelerate(int increment) {
        this.speed += increment;
    }

    public void brake(int decrement) {
        this.speed = Math.max(0, this.speed - decrement);
    }

    // 访问器方法
    public String getBrand() {
        return this.brand;
    }

    public String getColor() {
        return this.color;
    }

    public int getSpeed() {
        return this.speed;
    }

    // 重写equals方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Car car = (Car) obj;
        return brand.equals(car.brand) && color.equals(car.color);
    }
}

详细说明

  1. 类的组成:

    • 成员变量:描述对象的属性,如汽车的颜色、速度
    • 构造方法:初始化对象,设置初始状态
    • 成员方法:定义对象的行为,如加速、刹车
    • 访问修饰符:控制属性和方法的访问权限
  2. 对象的特点:

    • 状态:由成员变量的值决定,如汽车当前的速度
    • 行为:由成员方法定义,如汽车的加速和刹车
    • 标识:每个对象都是唯一的,可以通过equals方法比较
  3. 核心概念:

    • 封装:通过访问修饰符控制属性的访问
    • 继承:通过extends关键字实现代码复用
    • 多态:通过方法重写实现不同行为

注意事项

  1. 类名使用大驼峰命名法,如Car、Student
  2. 成员变量通常私有(private),通过方法访问
  3. 提供公共(public)访问方法,控制数据访问
  4. 重写equals()必须同时重写hashCode()
  5. 考虑实现toString()方法,方便调试

    クラスはオブジェクトの設計図であり、オブジェクトはクラスの実例です。オブジェクト指向プログラミングでは、クラスとオブジェクトを使用して、コードの再利用性と保守性を向上させます。