10.1.5 面向对象基本概念汇总
面向对象基础概念的复习,重点不是背一堆孤立定义,而是把对象、类、封装、继承、覆盖、多态、动态绑定放到一条链路里理解。
概念链路
mermaid
flowchart LR
R["现实世界"] --> O["对象<br/>ID + 属性 + 行为"]
O --> C["类<br/>共同属性和行为的模板"]
C --> I["实例化<br/>类创建对象"]
C --> P["封装<br/>隐藏细节,暴露接口"]
C --> G["继承/泛化<br/>一般与特殊"]
G --> OW["重写/覆盖<br/>子类替换父类实现"]
OW --> POLY["多态<br/>同一消息不同响应"]
POLY --> DB["动态绑定<br/>运行时决定实现"]这条链路能覆盖大多数概念题。
核心概念速查
| 概念 | 一句话 | 常考关键词 |
|---|---|---|
| 对象 | 具有标识、属性和行为的具体实体 | 对象 ID、状态、操作 |
| 类 | 对相似对象的抽象模板 | 共同属性、共同方法 |
| 实例化 | 由类创建对象 | new、创建实例 |
| 属性 | 对象静态特征 | 数据成员、状态 |
| 方法 | 对象动态行为 | 成员函数、操作 |
| 封装 | 隐藏内部数据和实现,只暴露接口 | 信息隐藏、访问控制 |
| 继承 | 子类复用父类属性和方法 | 父类、子类、复用 |
| 泛化 | 从特殊类抽象出一般类 | 一般化、父类 |
| 特化 | 从一般类派生特殊类 | 子类、派生类 |
| 重写/覆盖 | 子类替换父类方法实现 | 父子类、同名同参数 |
| 重载 | 同类中同名不同参数 | 参数列表不同 |
| 多态 | 同一消息作用于不同对象产生不同响应 | 同一接口、多种实现 |
| 动态绑定 | 运行时确定调用哪个实现 | 运行时、实际对象类型 |
容易混淆的边界
| 易混概念 | 区分 |
|---|---|
| 类 vs 对象 | 类是模板,对象是具体个体 |
| 属性 vs 状态 | 状态是一组属性具体取值形成的当前情况 |
| 消息 vs 方法 | 消息是对象间通信/请求,方法是对象内部可执行操作 |
| 封装 vs 继承 | 封装隐藏内部细节,继承复用父类特征 |
| 重写 vs 重载 | 重写在父子类之间,重载在同一类中看参数列表 |
| 多态 vs 动态绑定 | 多态是现象,动态绑定是运行时实现机制 |
访问控制速查
| 访问修饰 | 典型含义 |
|---|---|
private | 只允许本类内部访问 |
| 默认/包访问 | 同一包内可访问 |
protected | 本类、子类或同包可访问,具体依语言而定 |
public | 对外公开,可被其他对象访问 |
访问控制服务于封装。不要把所有成员都设成公开,否则外部代码会直接依赖内部实现。
考试判断口诀
| 题干问法 | 快速判断 |
|---|---|
| 父类和子类共享数据和方法的机制 | 继承 |
| 子类用自己的实现替换父类实现 | 覆盖/重写 |
| 把属性和行为隐藏起来,通过接口访问 | 封装 |
| 不同对象接收相同消息结果不同 | 多态 |
| 运行时决定调用哪个方法 | 动态绑定 |
| 同一类多个同名方法,参数不同 | 重载 |
| 对象组成部分不包括什么 | 通常不包括消息 |
例题
把数据和操作组织在对象内部,并通过接口控制访问,体现:
父类和子类之间共享属性和方法的机制是:
本节小结
面向对象三大特征是封装、继承、多态。对象由标识、属性和行为组成;类是对象的模板;继承带来复用和扩展;重写让子类替换父类实现;多态让同一消息产生不同响应;动态绑定在运行时选择实际方法。