先明确:Java 四大核心面向对象特性分别是 封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)、抽象(Abstraction)。下面从通俗生活视角、代码实现视角、设计思想视角、工程实战视角四个维度逐一讲解。
一、封装 Encapsulation
1. 生活视角
手机就是典型封装:外部只露出屏幕、按键、充电口,内部电路板、电池、芯片全部隐藏。用户只能通过公开按钮操作,不能直接修改内部电路,防止误操作损坏设备。
2. 代码实现视角
- 私有化成员变量
private,禁止外部直接访问; - 提供公共
getter/setter方法做访问入口; - 在方法内部增加数据校验逻辑。
public class User {
// 私有成员变量
private int age;
// 公开访问接口,增加数据校验
public void setAge(int age) {
if(age < 0 || age > 150) throw new RuntimeException("年龄非法");
this.age = age;
}
public int getAge(){ return age; }
}
3. 设计思想视角
信息隐藏 + 访问控制。把对象内部状态和实现细节隐藏,只对外暴露可控接口,降低外部随意篡改数据的风险。
4. 工程实战视角
- 便于后期修改内部逻辑,外部调用代码不用改动;
- 统一数据校验入口,避免脏数据;
- 模块化解耦,符合高内聚低耦合原则。
二、继承 Inheritance
1. 生活视角
父子关系:子女可以继承父辈的财产、长相、基因,同时也能拥有自己独有的特征。汽车分为燃油车、电动车,都继承 “车” 的通用属性(车轮、方向盘),各自扩展动力方式。
2. 代码实现视角
使用 extends 实现类继承,子类复用父类非私有属性和方法,支持方法重写 @Override;Java 只支持单继承,可以多实现接口。
// 父类
class Animal {
public void run(){}
}
// 子类继承
class Dog extends Animal {
@Override
public void run(){
System.out.println("小狗奔跑");
}
}
3. 设计思想视角
代码复用 + 泛化关系(is-a)。提取公共逻辑到父类,子类只关注差异化逻辑;表达 “子类是一种父类” 的从属关系。
4. 工程实战视角
优点:减少重复代码,便于统一维护公共逻辑。弊端:继承是强耦合关系,父类改动容易影响所有子类;复杂业务优先用组合替代继承。
三、多态 Polymorphism
1. 生活视角
同一个指令 “发出声音”,不同对象表现不同:猫喵喵叫、狗汪汪叫、小鸟叽叽喳喳。同一个遥控器按键,电视、空调做出不同响应。
2. 代码实现视角
多态三要素:父类引用指向子类对象 + 方法重写 + 运行时动态绑定。
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.run(); // 执行Dog的run
animal2.run(); // 执行Cat的run
两种形式:
- 编译多态(静态):方法重载 Overload
- 运行多态(动态):方法重写 Override
3. 设计思想视角
同一个行为,不同实现。面向父类 / 接口编程,运行时才确定具体执行哪个子类的逻辑。
4. 工程实战视角
核心是开闭原则:新增业务子类不需要修改原有调用代码。Spring、SpringBoot 大量依赖多态实现依赖注入、策略模式、插件化架构。
四、抽象 Abstraction
1. 生活视角
“交通工具” 就是抽象概念,只定义能载人、能行驶的行为,没有具体实物;火车、飞机、汽车都是对抽象概念的具体实现。
2. 代码实现视角
两种抽象方式:
- 抽象类 abstract class:可以有普通方法、成员变量,存在抽象方法,不能实例化;
- 接口 interface(JDK8 + 支持默认方法、静态方法):定义行为契约,侧重能力定义。
abstract class Vehicle {
public abstract void move(); // 抽象方法,无实现
}
interface Driveable {
void drive();
}
3. 设计思想视角
抽取共性行为,屏蔽具体实现。只定义 “要做什么”,不关心 “怎么做”。抽象是封装、继承、多态的基础。
4. 工程实战视角
用来定义顶层规范、统一接口标准。比如 RPC 接口、DAO 层接口、业务策略顶层抽象,面向抽象编程,极大提升扩展性。
四大特性整体关系(串联视角)
- 抽象:定下规范和行为(地基)
- 封装:保护每个对象内部数据(安全机制)
- 继承:复用代码,衍生具体子类(代码复用)
- 多态:基于抽象和继承实现灵活调用(最终落地能力)
72

被折叠的 条评论
为什么被折叠?



