【java】三大特性(封装、继承、多态)
Java三大特性详解:封装、继承、多态一次讲透
Java 作为一门典型的面向对象语言,有三个核心特性:
✅ 封装(Encapsulation)
✅ 继承(Inheritance)
✅ 多态(Polymorphism)
很多人会背概念,但真正写代码时却容易混淆。
这篇文章带你系统理解它们的本质与实际应用场景。
一、封装(Encapsulation)
1️⃣ 什么是封装?
封装的核心思想:
隐藏内部实现细节,对外只暴露必要的接口。
通俗理解:
👉 “该给你看的给你,不该看的别动。”
2️⃣ 封装的实现方式
- 使用
private修饰成员变量 - 提供
public的 getter / setter 方法 - 控制访问权限(public / protected / default / private)
示例:
publicclassUser{privateString username;// 私有属性publicStringgetUsername(){return username;}publicvoidsetUsername(String username){if(username ==null|| username.isEmpty()){thrownewIllegalArgumentException("用户名不能为空");}this.username = username;}}优势:
✔ 防止数据被随意修改
✔ 可以在 setter 中增加校验逻辑
✔ 降低耦合性
✔ 便于维护和扩展
二、继承(Inheritance)
1️⃣ 什么是继承?
继承是:
子类复用父类的属性和方法。
关键字:
extends示例:
publicclassAnimal{publicvoideat(){System.out.println("动物在吃东西");}}publicclassDogextendsAnimal{publicvoidbark(){System.out.println("狗在叫");}}2️⃣ 继承的特点
- Java 不支持多继承(类只能继承一个父类)
- 子类可以重写父类方法
- 子类可以扩展父类功能
方法重写示例:
@Overridepublicvoideat(){System.out.println("狗在吃骨头");}三、多态(Polymorphism)
1️⃣ 什么是多态?
多态的本质:
同一父类引用,指向不同子类对象。
示例:
Animal animal =newDog(); animal.eat();输出:
狗在吃骨头 说明:
- 编译时看左边(父类类型)
- 运行时看右边(实际对象)
2️⃣ 多态的前提
必须满足:
- 有继承关系
- 方法被重写
- 父类引用指向子类对象
3️⃣ 多态的意义
✔ 解耦
✔ 可扩展性强
✔ 符合开闭原则
✔ 框架设计核心思想
Spring 中大量使用多态思想,例如:
List list =newArrayList();四、继承普通类 vs 抽象类 vs 接口
很多人搞不清楚三者区别,这里一次对比清楚。
| 特性 | 继承普通类 | 继承抽象类 | 实现接口 |
|---|---|---|---|
| 关键字 | extends | extends | implements |
| 能否实例化 | 可以 | 不可以 | 不可以 |
| 是否可有构造方法 | 有 | 有 | 无 |
| 是否可有成员变量 | 可以 | 可以 | 只能是常量 |
| 抽象方法 | 不必须 | 可以有 | Java8前必须全是抽象方法 |
| 多继承 | ❌ 不支持 | ❌ 不支持 | ✅ 可实现多个接口 |
什么时候用哪种?
使用普通继承:
👉 明确是“is-a”关系
如:Dog 是 Animal
使用抽象类:
👉 有部分公共实现
👉 需要强制子类实现部分方法
publicabstractclassTemplate{publicvoidprocess(){step1();step2();}abstractvoidstep1();abstractvoidstep2();}使用接口:
👉 只定义规范
👉 需要多实现能力
publicinterfaceFlyable{voidfly();}Java8 之后接口可以有:
- default 方法
- static 方法
五、三大特性的关系
很多人误以为它们是独立的。
实际上:
封装 → 提供安全结构 继承 → 提供代码复用 多态 → 提供扩展能力 它们共同构成面向对象的核心思想。
六、面试常问问题
1️⃣ 为什么 Java 不支持类的多继承?
因为:
- 菱形继承问题
- 复杂性过高
- 可维护性差
Java 用接口解决多继承问题。
2️⃣ 多态是编译期还是运行期行为?
- 方法重载 → 编译期
- 方法重写 → 运行期
七、总结
Java 三大特性核心理解:
✔ 封装:控制访问
✔ 继承:代码复用
✔ 多态:行为扩展