Skip to content

02 面向对象与类设计

本章目标:掌握类与对象、封装、继承、多态,建立可维护的 Java 类设计思维。


1. 什么是面向对象

面向对象是把现实问题抽象成对象,通过对象之间协作完成业务。

核心思想:

  • 万物皆对象
  • 行为通过方法表达
  • 数据通过属性承载

2. 类与对象

java
class User {
    String name;
    int age;

    void sayHi() {
        System.out.println("Hi, 我是 " + name);
    }
}
java
User user = new User();
user.name = "Tom";
user.age = 22;
user.sayHi();

3. 封装(Encapsulation)

把属性私有化,通过公开方法控制访问。

java
class Account {
    private double balance;

    public void deposit(double money) {
        if (money > 0) {
            balance += money;
        }
    }

    public double getBalance() {
        return balance;
    }
}

好处:

  • 防止数据被随意篡改
  • 对外暴露稳定接口

4. 继承(Inheritance)

子类复用父类代码,表示“is-a”关系。

java
class Animal {
    public void eat() {
        System.out.println("动物在吃东西");
    }
}

class Dog extends Animal {
    public void bark() {
        System.out.println("汪汪叫");
    }
}

5. 多态(Polymorphism)

父类引用指向子类对象,同一方法调用表现出不同实现。

java
class Animal {
    public void sound() {
        System.out.println("动物发声");
    }
}

class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("喵喵喵");
    }
}

class Bird extends Animal {
    @Override
    public void sound() {
        System.out.println("啾啾啾");
    }
}
java
Animal a1 = new Cat();
Animal a2 = new Bird();
a1.sound(); // 喵喵喵
a2.sound(); // 啾啾啾

6. 抽象类与接口

6.1 抽象类

  • 用于描述“公共基础能力”
  • 可包含普通方法和抽象方法

6.2 接口

  • 只定义规范(能力契约)
  • 一个类可实现多个接口

7. 类设计建议

  1. 一个类只做一件事(单一职责)
  2. 优先组合而不是滥用继承
  3. 字段私有,方法公开(必要时)
  4. 对外暴露接口,隐藏实现细节

8. 面试高频点

  1. 封装、继承、多态分别解决什么问题?
  2. 抽象类和接口的区别?
  3. 重载(Overload)和重写(Override)区别?
  4. 为什么说“面向接口编程”更灵活?

9. 练习题

  1. 设计 EmployeeManagerDeveloper 三个类,体现继承和多态。
  2. 实现一个 Payable 接口,包含 pay() 方法。
  3. 用封装实现一个 Student 类,限制年龄必须在 0~120。

10. 本章小结

  • 面向对象不只是语法,而是建模思维。
  • 写可维护 Java 代码的关键:封装边界、抽象能力、合理复用。