封装、继承、多态可用“动物系统”连贯呈现:Person类用private+校验setter体现封装;Animal父类派生Dog/Cat体现继承;makeSound(Animal a)方法通过重写和动态绑定实现多态,构成安全、复用、灵活的设计闭环。

面试中讲封装、继承、多态,关键不是背定义,而是用一个连贯、真实、有细节的小例子串起三者,让面试官看到你理解它们的协作关系。推荐用「动物系统」——简洁、贴切、易扩展,也方便引出校验、重写、类型转换等高频考点。
封装:用 Person 类体现数据保护和接口控制
先说封装,重点落在“为什么不能 public,而要 getter/setter”。可以举 Person 类:
- 姓名、年龄设为 private,防止外部直接赋值(比如 age = -5 或 200)
- 在 setAge() 里加校验逻辑:if (age < 0 || age > 150) throw new IllegalArgumentException("年龄非法")
- 强调:封装不是为了“不让改”,而是“让改得安全、可控、可追溯”——比如后续加日志、触发事件,都不影响调用方
继承:从 Animal 到 Dog/Cat,体现 is-a 和代码复用
接着自然过渡到继承。以 Animal 为父类:
- Animal 有 name、eat()、sleep();Dog extends Animal,额外有 bark()
- 说明 Java 是单继承,但 Dog 同时也是 Object 的子类,形成层级链
- 点出关键细节:构造方法不继承,所以 Dog 构造器里常写 super(name);private 成员不可见,但可通过 protected/public 方法间接使用
多态:用同一份代码处理不同子类,突出运行时绑定
最后用多态把前两者串起来,这是面试最爱挖的点:
立即学习“Java免费学习笔记(深入)”;
- 写一个方法:public void makeSound(Animal a) { a.sound(); }
- 传入 new Dog() → 打印“汪汪汪”;传入 new Cat() → 打印“喵喵喵”
- 解释本质:编译看声明类型(Animal),运行看实际类型(Dog/Cat),靠动态绑定 + 方法重写(@Override)实现
- 顺带提一句向上转型(Animal a = new Dog())和向下转型(Dog d = (Dog) a)的场景与风险,比如转型前用 instanceof 判断
这样讲下来,三个特性不是割裂的概念,而是一个设计闭环:封装打好地基,继承搭好骨架,多态赋予灵活血肉。面试官听到的不是一个知识点,而是一套思考习惯。


















