面向对象编程的三大特性是封装、继承、多态,本质是解决实际问题的设计习惯:封装通过private数据与public方法划清责任边界;继承表达“是一种”关系以复用与定制行为;多态依托父类引用和动态绑定实现灵活扩展。

面向对象编程的三大特性——封装、继承、多态,不是抽象概念,而是解决实际问题的设计习惯。掌握它们的关键,不在于死记定义,而在于理解“为什么需要这样设计”。
封装:控制谁能看到、谁能改
封装的本质是划清责任边界。比如一个银行账户,余额不能被外部随意加减,但可以存取、查询。这就需要把 数据(balance)设为 private,只暴露安全的操作入口(deposit、withdraw、getBalance)。
- 用 private 把核心数据锁在类内部,防止误操作或恶意修改
- 提供 public 方法 作为唯一出口,方法里可加入校验逻辑(如“取款不能超余额”)
- 即使将来把余额从 double 改成 BigDecimal,只要接口不变,调用方完全不用改代码
继承:让新类站在旧类肩膀上
继承不是为了“抄代码”,而是为了表达“是一种”的关系。比如“狗是一种动物”,那么 Dog 类就可以复用 Animal 的 eat()、sleep() 方法,再补充自己的 bark()。
- 子类自动获得父类的非私有成员,减少重复编码
- 子类可 重写(override) 父类方法,定制行为(如 Dog.eat() 输出“吃狗粮”,Cat.eat() 输出“吃猫粮”)
- Java 只支持单继承,但允许多层继承(A → B → C),也支持通过接口实现多重能力组合
多态:同一动作,不同对象不同反应
多态让程序更灵活。比如一个 feed(Animal a) 方法,传入 Dog 就执行 Dog 的 eat(),传入 Cat 就执行 Cat 的 eat()——调用者不用关心具体类型,系统自动选对版本。
- 依赖 父类引用指向子类对象(如 Animal a = new Dog())
- 运行时根据实际对象类型决定调用哪个方法,这叫 动态绑定
- 新增子类(比如 Bird)时,feed() 方法无需改动,仍能正常工作
这三个特性常常一起出现:先用封装组织好单个类,再用继承建立类之间的关系,最后靠多态统一处理不同子类。它们共同的目标,是让代码更可靠、更易改、更容易应对变化。











