封装解决数据安全与耦合问题,体现为有选择地暴露接口并校验逻辑(如setage()校验),重要在于提升系统健壮性;继承解决代码复用与层次建模问题,体现为is-a关系下的单继承与重写约束,重要在于支撑可扩展性;多态解决同一接口不同实现问题,体现为父类引用调用子类重写方法,重要在于支撑可替换性与开闭原则。

直接说核心:封装、继承、多态,每个词背后要能讲清楚“它解决什么问题”“怎么体现”“为什么重要”,而不是背定义。
封装:不是加 private 就完事
封装的本质是控制访问、保护数据、降低耦合。关键不在“藏”,而在“有选择地暴露”。
- 只用 private 字段 + public getter/setter 不等于真正封装——比如 setAge(-1) 合法但荒谬,必须在 setter 里加校验逻辑
- 不是所有字段都要 get/set:像账户余额这类敏感属性,可能只提供 deposit() / withdraw() 方法,不开放直接修改
- 访问修饰符要会对比:private(仅本类)、default(同包)、protected(同包+子类)、public(全局),面试常问 protected 能否跨包被非子类访问?答案是否定的
继承:复用≠滥用,单继承有边界
继承表达的是“is-a”关系,核心价值是代码复用和建立类层次,但 Java 只支持单继承(一个类只能 extends 一个父类)。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 子类能继承父类的 非 private 成员(字段、方法),但不能继承构造器;子类构造器默认调用 super()
- 重写方法要遵守“两同两小一大”:方法名参数相同;返回类型更小或相同(协变返回);异常类型更小或相同;访问权限更大或相同
- 慎用继承:如果只是为了复用代码,优先考虑组合(has-a);只有语义上确实是“一种”时才用继承(比如 Bird 是 Animal,但 Engine 不是 Car)
多态:运行时行为差异的底层支撑
多态让同一调用产生不同结果,依赖三个条件缺一不可:继承关系、方法重写、父类引用指向子类对象(即向上转型)。
- 编译时看引用类型(左边),运行时看实际对象类型(右边)——这是理解多态输出的关键
- 只有实例方法能参与多态:static、final、private 方法无法被重写,因此不表现运行时多态
- 常见陷阱:父类引用不能调用子类独有的方法;向下转型需 instanceof 判断,否则抛 ClassCastException
答面试题时,用一句话点题,再各举一个简短代码例子说明,最后落到设计价值上——比如封装提升健壮性,继承支撑可扩展性,多态支撑可替换性(开闭原则)。不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










