1. 封装、继承、多态
封装(Encapsulation)
一、是什么?
将数据和操作数据的方法捆绑为一个独立单元(类),通过访问控制隐藏内部细节。
二、解决什么问题
- 防止外部直接访问或修改敏感数据(如账户余额)
- 降低代码耦合性,内部逻辑修改不影响外部调用
三、核心实现方式
- 使用
private
修饰属性 - 提供
public
的 getter/setter 方法控制访问
四、应用场景
- 实体类设计(如
User
类隐藏密码字段) - API接口设计(隐藏实现细节)
五、Java示例
java
public class BankAccount {
private double balance; // 私有属性
// 公共方法访问私有属性
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) balance += amount; // 封装校验逻辑
}
}
六、重要注意事项
- 避免过度暴露 setter,优先通过方法封装业务逻辑(如
deposit()
而非直接setBalance()
)
继承(Inheritance)
一、是什么?
子类自动获得父类的属性和方法,实现代码复用和层次化扩展。
二、解决什么问题
- 消除重复代码(如多个类共有的
id
属性) - 建立类之间的层次关系(如
Animal
→ Cat/
Dog`)
三、核心语法
extends
关键字实现继承- 子类可重写父类方法(
@Override
)
四、应用场景
- 通用功能抽象(如基类
BaseEntity
包含 id和
createTime`) - 框架扩展(Spring 中
JpaRepository
继承)
五、Java示例
java
class Animal {
void eat() { System.out.println("Eating..."); }
}
class Dog extends Animal { // 继承
@Override
void eat() { System.out.println("Dog eats bones"); } // 重写
}
六、重要注意事项
- Java 是单继承(一个子类只能有一个父类)
- 慎用继承,避免过度层级(优先使用组合替代继承)
多态(Polymorphism)
一、是什么?
同一操作作用于不同对象时产生不同行为,分为编译时多态(重载)和运行时多态(重写)。
二、解决什么问题
- 提高代码扩展性(新增子类不影响原有逻辑)
- 统一接口处理不同对象(如
Animal
调用 eat()`)
三、核心机制
- 方法重写(Override)
- 父类引用指向子类对象:
Animal a = new Dog();
四、应用场景
- 插件化架构(通过接口统一调用不同实现)
- 集合操作:
List<String> list = new ArrayList<>();
五、Java示例
java
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.eat(); // 输出 "Dog eats bones"(运行时绑定)
animal2.eat(); // 输出 "Cat eats fish"
六、重要注意事项
- 多态调用方法时,编译看父类,运行看子类
- 属性没有多态性(属性访问由引用类型决定)
三者的区别
特性 | 核心目标 | 关键操作 | 典型场景 |
---|---|---|---|
封装 | 隐藏内部实现 | private属性 + getter | 实体类设计 |
继承 | 代码复用 | extends + 重写方法 | 构建类层次结构 |
多态 | 灵活扩展行为 | 父类引用指向子类对象 | 统一接口处理不同子类 |
总结
- 封装是基础:保证对象的安全性和模块化
- 继承是手段:实现代码复用和层次化设计
- 多态是灵魂:通过动态绑定提升系统扩展性
三者协同工作:封装定义对象边界 → 继承构建关系 → 多态实现行为多样性。实际开发中,优先通过封装和组合设计类,谨慎使用继承,充分运用多态降低耦合。