理解面向对象三大特性是递进关系:封装保障安全与可维护,继承实现单向复用,多态支持运行时动态绑定;接口侧重行为契约,抽象类侧重共性实现;final、equals与hashCode需协同使用以确保集合正确性。

别硬背,理解逻辑再记关键词,面试官要的是你懂,不是复读机。
抓住三条主线,比死记定义管用
封装、继承、多态不是三个孤立概念,而是递进关系:
- 封装是起点:用 private + getter/setter 控制字段访问,重点不是“写了没”,而是“为什么不能直接 public?”——答数据安全、可维护、留扩展口(比如 set 里加校验)
- 继承是复用手段:extends 实现父子关系,但 Java 只支持单继承;面试常问“为什么不用继承而用组合?”,答案要落在松耦合、易替换(比如 ArrayList 内部用数组,不是继承数组)
- 多态是运行时能力:父类引用指向子类对象(如 Animal a = new Dog()),调用方法时“编译看左边,运行看右边”——这是核心口诀,必须能结合代码说清
接口和抽象类,按场景记区别
别背表格,想两个典型例子:
- 需要定义行为契约(多个不相关类都要做某事)→ 用接口:比如 Runnable、Serializable,还能多实现
- 需要提供通用实现(同类事物有共性逻辑)→ 用抽象类:比如 Animal 里写通用的 breathe(),子类只重写 sound()
Java 8 后接口可以有 default 方法,但不能有构造器、普通成员变量——这点常被追问。
OpenJDK 24 Windows x64 官方参考实现(24+36),适合 Windows 环境进行 Java 开发、编译、运行和版本兼容性验证。
立即学习“Java免费学习笔记(深入)”;
多态题怎么答才不踩坑
面试常给一段代码让你判断输出,关键盯住三点:
- 方法调用走重写(override),所以看实际对象类型(右边)
- 属性访问不具多态性,只看声明类型(左边)
- 向下转型前必须用 instanceof 判断,否则抛 ClassCastException
例如:Pet p = new Cat(); p.eat(); 输出 “猫吃东西”,但 p.nickname 如果是父类 private 字段,子类无法覆盖,访问不到。
final、equals 和 hashCode,绑定一起记
它们常成套出现:
- final 修饰类 → 不能被继承;修饰方法 → 不能被重写;修饰变量 → 引用地址不可变(但对象内部可变)
- equals 重写必须同时重写 hashCode,否则放进 HashMap 可能找不到——因为哈希桶定位靠 hashCode,内容比较靠 equals
- 重写时优先用 Objects.equals() 和 Objects.hash(),避免空指针和手写错误

















