Java 的三大特性:封装、继承、多态
Java 是典型的面向对象编程语言(OOP),其最核心的三大特性就是封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。这三大特性是 Java 设计的基础,帮助实现代码的可重用性、可维护性和灵活性。
1. 封装(Encapsulation)
定义:将对象的属性(数据)和行为(方法)绑定在一起,并尽可能隐藏对象的内部实现细节,只对外暴露必要的接口。
核心思想: “高内聚,低耦合” —— 数据保护 + 信息隐藏。
实现方式:
- 使用访问修饰符(private、protected、public、默认)
- 属性私有化(private)
- 提供公共的 getter/setter 方法
示例:
publicclassPerson{privateStringname;// 属性私有privateintage;// 公共 getter/setterpublicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age>0&&age<150){// 封装时可加入数据校验this.age=age;}}}优点:
- 保护数据安全(防止外部随意修改)
- 提高代码维护性(内部实现可随意修改,只要接口不变)
- 便于单元测试和模块化开发
2. 继承(Inheritance)
定义:子类(派生类)可以继承父类(基类)的属性和方法,实现代码复用。
核心思想: “is-a” 关系(子类是一种父类)。
实现方式:
- 使用
extends关键字(类继承) - Java 只支持单继承(一个类只能继承一个父类),但可通过接口实现多继承效果
示例:
classAnimal{publicvoideat(){System.out.println("吃东西");}}classDogextendsAnimal{// Dog 是 Animalpublicvoidbark(){System.out.println("汪汪");}}publicclassTest{publicstaticvoidmain(String[]args){Dogdog=newDog();dog.eat();// 继承自 Animaldog.bark();// 自身方法}}优点:
- 代码复用,避免重复编写
- 建立类层次结构,便于管理
注意事项:
- 子类可重写(override)父类方法
- 使用
super关键字调用父类构造器或方法
3. 多态(Polymorphism)
定义:同一接口,不同实例执行时表现出不同的形态。简单说:“一个接口,多种实现”。
两种实现形式:
- 编译时多态(方法重载 Overloading):同一个类中,方法名相同、参数列表不同
- 运行时多态(方法重写 Overriding):父类引用指向子类对象,调用被重写的方法时执行子类版本
运行时多态是 Java 多态的核心。
示例(运行时多态):
classAnimal{publicvoidmakeSound(){System.out.println("动物叫声");}}classDogextendsAnimal{@OverridepublicvoidmakeSound(){System.out.println("汪汪");}}classCatextendsAnimal{@OverridepublicvoidmakeSound(){System.out.println("喵喵");}}publicclassTest{publicstaticvoidmain(String[]args){Animala1=newDog();// 向上转型Animala2=newCat();a1.makeSound();// 输出:汪汪(运行时决定调用 Dog 的版本)a2.makeSound();// 输出:喵喵}}实现条件(运行时多态):
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象(向上转型)
优点:
- 提高代码扩展性和灵活性
- 实现“面向接口编程”,降低耦合(如 List list = new ArrayList<>())
三大特性对比总结表
| 特性 | 核心目的 | 关键字/机制 | 典型应用场景 |
|---|---|---|---|
| 封装 | 数据隐藏与保护 | private + getter/setter | POJO 类、业务实体 |
| 继承 | 代码复用 | extends | 建立类层次(如 Animal → Dog) |
| 多态 | 灵活性与扩展性 | override + 向上转型 | 框架设计(如 Spring、集合框架) |
实战建议
- 优先使用封装保护数据(所有属性 private)
- 合理使用继承建立 is-a 关系,避免滥用(组合优于继承)
- 充分利用多态实现解耦,面向接口/抽象类编程
这三大特性相互配合,是 Java 面向对象编程的精髓。掌握它们,你就能写出更优雅、更可维护的 Java 代码!
如果你想深入某个特性(如多态的 JVM 实现机制、抽象类 vs 接口等),随时告诉我!