面向对象编程主题总纲
更新时间:2026-08-25。本文是
languages/域落地主题 面向对象编程(OOP) 的总纲。OOP 不是某一门语言的语法,而是一套用"对象"组织代码的工程心智——它决定了类怎么设计、继承怎么用、多态怎么解耦。本站architecture/design-patterns/的 23 种设计模式,几乎全部建立在这套心智之上。
为什么本站要讲 OOP
本站主线是性能与底层(C/C++ 为主),但落地语言域后,Java、C++、Go 都带着各自的 OOP 风格。OOP 总纲的目的:
- 把"封装、继承、多态"三大特性讲透——这是 Java 核心 与 C++ 现代特性 共同的语言基础。
- 衔接本站 GoF 23 设计模式——模式是 OOP 思想的定型表达。
- 提供多语言对照:同一 OOP 概念在 Java/C++/Go 里的不同实现,避免学一门语言被它的表达局限。
| OOP 概念 | Java | C++ | Go |
|---|---|---|---|
| 类 | class | class | struct + 方法 |
| 封装 | private/protected/public | private/protected/public | 首字母大小写(导出/私有) |
| 继承 | extends(单继承) | :(多继承) | 结构体嵌入(组合) |
| 多态 | 接口 implements | 虚函数/纯虚 | interface(隐式实现) |
| 接口 | interface | 纯虚类 | interface(duck typing) |
一句话定位:languages/oop/ 用"语言无关的工程心智"打底,让 Java/C++/Go 的类设计有统一理论;它与 architecture/design-patterns/ 是"思想"与"模式"的两层。
学习路径:四篇递进

| 阶段 | 读什么 | 产出 |
|---|---|---|
| ① 总纲 | 本文 | 建立 OOP 三大特性全景 |
| ② 封装继承 | 封装、继承与组合 | 会设计类体系、避免继承滥用 |
| ③ 多态 | 多态与接口 | 理解动态绑定与依赖倒置 |
| ④ 原则 | 设计原则与模式衔接 | 落地 SOLID,衔接 23 种模式 |
一、类与对象:模板与实例
java
class Dog {
private String name; // 属性(状态)
Dog(String name) { this.name = name; }
void bark() { // 方法(行为)
System.out.println(name + " 汪汪");
}
}
Dog d = new Dog("旺财"); // 对象 = 类的实例
d.bark();| 概念 | 说明 | 类比 |
|---|---|---|
| 类 class | 属性和行为的模板/蓝图 | 菜谱 |
| 对象 object | 类的实例,有独立状态 | 按菜谱做的一道菜 |
| 属性 field | 对象的数据(状态) | 菜的配料 |
| 方法 method | 对象的行为(操作数据) | 做菜步骤 |
核心直觉:类是"类型",对象是"值"——类是编译期概念,对象是运行期实体。这与 C 语言的 struct 一脉相承,但 OOP 把"对数据的操作"也绑定到了对象上。
二、三大特性速览
| 特性 | 定义 | 解决的问题 |
|---|---|---|
| 封装 | 把数据私有,暴露有限接口 | 防止外部乱改内部状态 |
| 继承 | 子类复用/扩展父类 | 代码复用、建立 is-a 关系 |
| 多态 | 同一接口,不同实现,运行期绑定 | 依赖抽象,解耦调用方与被调方 |

三、抽象类 vs 接口
| 对比项 | 抽象类 abstract class | 接口 interface |
|---|---|---|
| 本质 | "是什么"(is-a),含实现 | "能做什么"(can-do),纯契约 |
| 状态 | 可有字段 | Java 8 前无字段,之后可静态常量 |
| 方法实现 | 可含普通方法 | 默认方法(default) |
| 多继承 | 单继承 | 可多实现 |
| 场景 | 提取公共基类 | 定义能力契约(Comparable、Runnable) |
java
abstract class Shape { // 抽象类:抽公共状态
protected double area; // 可有字段
abstract double area(); // 抽象方法:子类必须实现
}
interface Drawable { // 接口:纯能力契约
void draw();
}选择口诀:需要共享状态用抽象类,只需要"能做什么"用接口。Go 语言没有继承只有 interface(组合优先),这是现代工程趋势。
四、OOP 与本站主线衔接
- 设计模式:OOP 三大特性是 GoF 23 设计模式 的原料——多态是策略/观察者/模板方法的基础,封装是门面/单例的出发点。
- Java:JVM 里对象布局、虚方法表(vtable)实现多态,见 Java 核心。
- C++:虚函数与 vtable、抽象类的内存代价,见 C++ 现代特性。
- 性能视角:多态的虚函数调用是间接跳转,可能影响指令缓存(I-cache)——详见 L3 缓存。
五、OOP vs 其他范式
| 范式 | 组织单位 | 核心机制 | 代表语言 |
|---|---|---|---|
| 面向对象 | 对象/类 | 封装、继承、多态 | Java、C++、Python |
| 函数式 | 纯函数/不可变 | 高阶函数、组合 | Haskell、Scala |
| 过程式 | 函数 | 顺序/循环/分支 | C |
| 面向切面 | 横切关注点 | 代理/拦截 | Spring AOP |
本站建议:OOP 是主范式(Java/C++),函数式思想作为补充(Stream/不可变),两者结合是现代工程常态。
一句话总结
面向对象编程 = 用"类"封装数据与行为、用"继承"复用、用"多态"解耦;它是一套工程心智而非语言语法,与设计模式、Java/C++/Go 语言实现层层衔接。