面向对象编程的三大特性是封装、继承与多态:封装通过访问控制划定边界、保障数据安全与模块独立;继承基于“is-a”关系实现代码复用与能力扩展;多态依托继承或接口,通过方法重写与动态绑定,使同一接口可有多种实现。三者协同——封装筑基,继承建模,多态赋能,共同支撑oop核心设计思想。

面向对象编程的三大特性——继承、封装、多态,并非孤立概念,而是环环相扣、共同支撑起OOP设计思想的核心支柱。理解它们不能只背定义,关键在于看清三者如何协同作用:封装划定边界,继承扩展能力,多态统一调用。
封装:不是“藏起来”,而是“管住访问”
封装的本质是控制外部对类内部数据和行为的访问权限,目标是提高模块独立性与可维护性。它不等于简单地把字段设为private,而是要结合业务语义做合理抽象。
- 字段私有化只是起点,重点在于提供有意义的public方法(如getBalance()而不是直接暴露balance变量)
- 构造器、setter中加入校验逻辑(比如年龄不能为负),把约束内聚在类内部
- 避免暴露内部实现细节:例如List类型字段返回Collections.unmodifiableList()而非原始引用
继承:复用≠滥用,关键是“is-a”关系是否成立
继承用于表达明确的类间层级关系,强调子类天然具备父类的属性和行为。但过度使用会导致紧耦合,现代设计更倾向“组合优于继承”。
- 优先考虑能否自然说出“B是A的一种”(如Dog是Animal,但CarEngine不是Car)
- 父类应聚焦稳定、通用的行为;避免为“方便复用”而强行抽取公共父类
- 慎用protected成员——它打破了封装边界,让子类过度依赖父类实现细节
多态:运行时动态绑定,靠的是“同一接口,不同实现”
多态让程序能以统一方式处理不同类型的对象,其底层依赖继承或接口实现 + 方法重写 + 向上转型。没有封装和继承打底,多态就失去意义。
- 实现方式有两种:基于继承(子类重写父类方法)、基于接口(多个类实现同一接口)
- 关键触发条件:声明类型是父类/接口,实际创建的是子类/实现类对象(如Animal a = new Dog())
- 调用方法时,JVM根据实际对象类型决定执行哪个版本——这就是动态绑定,也是多态的运行时本质
三者真正形成体系:封装确保每个类职责清晰;在此基础上,继承建立可扩展的类型结构;而多态则让这种结构能在不修改调用代码的前提下灵活替换具体实现。面试中讲清这个协作逻辑,比单独罗列定义更有说服力。











