Java面向对象核心逻辑链:类与对象定义行为契约和独立状态,封装控制变化边界,继承解决is-a可扩展性,多态依赖向上转型与重写实现运行时动态绑定,抽象通过接口解耦“能做什么”、抽象类沉淀“怎么做一半”。

Java面向对象核心大纲面试题,重点不在背定义,而在理清逻辑链条:类和对象是起点,封装、继承、多态是主干,抽象是支撑骨架的思想。面试官真正想看的,是你能不能把这几个概念串成一条线,讲清楚“为什么需要它”“它解决了什么问题”“不这么写会怎样”。
类与对象:先分清“图纸”和“实物”
别一上来就背“类是模板,对象是实例”。要能说清实际意义:
- 类不是数据容器,而是行为契约——它定义了“这类东西能做什么”,比如
Car类声明了start()和brake(),哪怕还没造出一辆车,接口就已存在 - 对象必须有独立状态——两个
Person对象可以有不同name和age,但共用同一套方法字节码(方法区加载一次,所有实例共享) - 构造方法不是“初始化工具”,而是对象生命周期的入口——它确保对象创建时至少满足基本约束(比如
id不能为空),否则直接抛异常,不给半成品留余地
封装:不是加个private就完事
封装的本质是“控制变化的边界”,关键在设计意图:
-
private字段 +publicgetter/setter 是常见写法,但不是封装本身——如果setter里不做校验(比如年龄设为-5),那只是形式封装 - 真正封装体现在“隐藏决策权”:比如
Account类把balance设为private,所有增减操作都走deposit()或withdraw(),这样未来加手续费、审计日志、风控拦截,只改这两个方法,调用方完全无感 - 包级访问(默认修饰符)常被忽略——它其实是模块内协作的合理边界,比
public更安全,比private更灵活
继承与多态:警惕“为了复用而继承”
继承不是代码搬运工,多态不是语法糖,它们共同解决的是“可扩展性”问题:
立即学习“Java免费学习笔记(深入)”;
- 继承的前提是“is-a”关系成立——
Dog extends Animal合理,Rectangle extends Circle就不行;强行继承会导致子类被迫实现无意义方法(如Circle的bark()) - 多态的落地依赖两个条件:向上转型(
Animal a = new Dog();)+ 方法重写(Dog重写makeSound())。缺一不可,否则只是普通调用 - 面试常问“重载和重写区别”,核心差异在绑定时机:重载是编译期静态绑定(看引用类型),重写是运行期动态绑定(看实际对象类型)
抽象:接口和抽象类不是二选一
抽象是为了解耦,但选择哪种抽象方式,取决于你要解的是哪层耦合:
- 接口定义“能做什么”——比如
Runnable只承诺有run(),不管怎么跑、谁来跑,适合跨领域协作(线程、定时任务、GUI事件都能用) - 抽象类定义“怎么做一半”——比如
AbstractList已实现size()isEmpty()等通用逻辑,子类只需专注get(int)和set(int, E),适合同类体系内的共性沉淀 - Java 8+ 接口可以有default方法,但别滥用——它本意是向后兼容新增方法,不是替代抽象类;若default方法里有复杂状态或需要protected成员,说明该抽成抽象类更合适


















