Skip to content
第 13 / 250 章后端⏱ 10 分钟阅读

第 13 章:面向对象思想入门

学习目标

  • 理解为什么需要面向对象(OOP)
  • 掌握类与对象的关系
  • 建立 OOP 的基本思维方式

一、从过程式到面向对象

假设你要实现一个简单的"学生成绩管理"系统。

过程式写法(不推荐)

java
// 数据和操作分离
String[] names = {"张三", "李四", "王五"};
int[] scores = {85, 92, 78};

// 求平均分
double average = 0;
for (int score : scores) {
    average += score;
}
average /= scores.length;

// 打印成绩单
for (int i = 0; i < names.length; i++) {
    System.out.println(names[i] + ": " + scores[i]);
}

问题

  1. 数据和操作分离,names 和 scores 必须同步遍历
  2. 多个函数操作同一份数据,容易出错
  3. 难以扩展(比如新增"班级"字段,要改所有函数)

面向对象写法(推荐)

java
class Student {
    String name;
    int score;

    void print() {
        System.out.println(name + ": " + score);
    }
}

Student[] students = {
    new Student("张三", 85),
    new Student("李四", 92),
    new Student("王五", 78)
};

for (Student s : students) {
    s.print();  // ① 数据和操作绑定在一起
}

二、OOP 的核心思想

三、类与对象

3.1 类 = 模板

是对象的蓝图/模板,定义对象有什么字段、什么方法。

java
class Student {       // ① 类:定义模板
    String name;       // ② 字段(属性)
    int score;

    void print() {     // ③ 方法(行为)
        System.out.println(name + ": " + score);
    }
}

3.2 对象 = 实例

对象是类的具体实例。

java
Student s1 = new Student();    // ① 创建对象
s1.name = "张三";               // ② 设置字段
s1.score = 85;
s1.print();                     // ③ 调用方法

Student s2 = new Student();
s2.name = "李四";
s2.score = 92;
s2.print();

3.3 类比

类比Java
建筑图纸
具体建筑对象
户型字段
功能方法

四、为什么要用 OOP?

示例:电商系统的订单处理

java
// 过程式:所有逻辑混在一起
public static void processOrder() {
    validate();
    calculate();
    payment();
    notify();
}

// OOP:每个职责一个类
class OrderValidator { void validate() {} }
class PriceCalculator { BigDecimal calculate() {} }
class PaymentProcessor { void pay() {} }
class NotificationService { void notify() {} }

class OrderService {                    // ① 订单服务组合各个组件
    private final OrderValidator validator;
    private final PriceCalculator calculator;
    private final PaymentProcessor payment;
    private final NotificationService notifier;

    public void processOrder(Order order) {
        validator.validate(order);
        BigDecimal price = calculator.calculate(order);
        payment.pay(order, price);
        notifier.notify(order);
    }
}

五、万物皆对象?

Java 社区有句名言:"一切皆对象"。但严格说,基本类型不是对象

类型是否对象
8 种基本类型❌ 不是
数组✅ 是(继承 Object)
类实例✅ 是
枚举✅ 是
java
int i = 10;            // ❌ 基本类型
Integer ii = 10;       // ✅ 包装类是对象
String s = "hello";    // ✅ String 是对象
int[] arr = {1, 2, 3}; // ✅ 数组是对象(继承 Object)

Java 通过包装类把基本类型伪装成对象,以适配集合、泛型等场景。

六、OOP vs 其他范式

范式代表语言思想
过程式C函数 + 数据结构
面向对象Java / C++类 + 对象 + 继承 + 多态
函数式Haskell / Erlang函数是一等公民
响应式RxJava / Reactor数据流 + 变换

Java 是多范式语言:OOP 是基础,也支持函数式(Lambda)和响应式(Reactor)。

七、本章小结

要点关键
OOP 的核心封装 + 继承 + 多态
对象的模板,定义字段和方法
对象类的实例,存放在堆
OOP 优势模块化、可维护、可复用、可扩展
Java 不是纯 OOP8 种基本类型不是对象

下一章第 14 章:类的定义与对象创建

本站基于 VitePress 构建 · 由 Codebook 团队维护