Java面向对象的三大特性是封装、继承、多态。封装通过private属性与public getter/setter实现访问控制与逻辑校验;继承用extends支持单继承与is-a关系,子类可扩展、重写并调用父类成员;多态依赖父类引用指向子类对象、方法重写和继承关系,实现运行时动态绑定。

Java面向对象的三大特性是封装、继承、多态。它们不是孤立的概念,而是共同支撑起“用对象建模现实世界”这一核心思想的三根支柱。
封装:把数据和操作绑在一起,只留安全出口
封装的本质是控制访问——把属性设为 private,不让外部直接读写;再提供 public 的 getter/setter 方法作为唯一入口。这样做的好处不只是“隐藏”,更是为了在入口处加控制逻辑。比如设置年龄时自动校验是否在 0–150 范围内,密码字段在 set 时自动加密存储。它让类变成一个可信赖的“黑盒”,使用者只关心怎么用,不操心内部怎么实现。
继承:子类自然获得父类能力,并能个性化扩展
继承用 extends 实现,体现的是“is-a”关系(比如 Dog is-a Animal)。子类自动拥有父类非 private 的属性和方法,还能:
- 添加自己独有的属性和方法
- 用 @Override 重写父类方法(如 Animal.eat() → Dog.eat() 输出“啃骨头”)
- 通过 super 调用父类构造器或方法
注意:Java 只支持单继承,但可以通过接口弥补多继承需求。
多态:同一句代码,运行时才决定具体执行谁的方法
多态的关键在于“父类引用指向子类对象”。例如:
Animal a = new Dog();
a.eat(); // 实际调用 Dog 类的 eat 方法
这里编译看左边(Animal),运行看右边(Dog)。要达成多态,必须同时满足:
- 有继承或实现关系
- 有方法重写
- 有父类引用指向子类对象
它让程序更灵活:新增一个 Cat 类,只要继承 Animal 并重写 eat(),原有调用代码完全不用改。
基本上就这些。不复杂,但容易忽略细节——比如封装没加校验、继承忘了 super 调用、多态缺了重写,效果就大打折扣。










