java面向对象四大特性是封装、继承、多态和抽象;封装强调控制访问与隐藏实现,继承体现“is-a”关系并遵循里氏替换,多态依赖运行时动态绑定实现解耦,抽象通过接口定义能力契约、抽象类提供共通骨架。

Java 面向对象(OOP)是面试必考核心,不是背概念就能拿高分——关键在于理解本质、能讲清区别、会结合代码说场景。
封装:别只说“private + getter/setter”
封装的本质是控制访问、隐藏实现、暴露契约。面试官想听你讲清楚“为什么封装”,而不是怎么写。
- 真正体现封装的,是类内部状态不被外部随意修改(比如用 private 修饰字段,但 setter 中加校验逻辑)
- 接口(interface)和抽象类(abstract class)也是封装手段:定义行为契约,不暴露实现细节
- 反例:public 字段 + 无校验的 setter = 假封装;只改访问符没改设计逻辑 = 形式主义
继承:重点讲清“is-a”和复用边界
继承不是为了代码复用而存在,而是建模“是一种”的关系。滥用继承是高频扣分点。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 子类必须能完全替代父类(里氏替换原则):比如 Square 继承 Rectangle,setHeight/setWidth 会导致面积计算异常,就违反了
- 优先组合优于继承:当“has-a”或“uses-a”时(如 Car 有 Engine),用成员变量 + 接口更灵活、更易测试
- Java 中继承是单继承,但接口可以多实现——这是为了解耦和扩展性,不是语法限制的妥协
多态:运行时绑定才是灵魂
多态 ≠ 重载(overload),也不是简单写个父类引用指向子类对象。面试要抓住“编译看类型、运行看对象”这个底层机制。
- 方法调用分三步:编译期确定签名(静态绑定)、JVM 加载类后生成虚方法表(vtable)、运行时查表找实际入口(动态绑定)
- 只有 非 private / static / final 的实例方法 才有多态;重载是编译期决定,属于静态多态,不算 OOP 意义上的多态
- 实战举例:Spring Bean 的代理(JDK 动态代理/CGLIB)、策略模式中的 context.execute(),背后都是多态在起作用
抽象与接口:别再只背“接口不能有方法体”
Java 8+ 后,接口可以有 default 和 static 方法,抽象类也能有具体方法——区分重点转向设计意图。
- 接口强调“能做什么”(what),定义能力契约,适合跨领域复用(如 Comparable、Runnable)
- 抽象类强调“是什么”(what it is),提供共通骨架和状态,适合同族类共享实现(如 AbstractList)
- 一个类可以实现多个接口,但只能继承一个抽象类;如果未来可能需要添加新方法且不影响现有实现,优先选 interface + default 方法
不复杂但容易忽略:所有 OOP 特性都要落到“解决什么问题”上。比如封装防误改、继承建模型、多态解耦合、抽象定契约。能结合 ArrayList、HashMap 或 Spring 源码片段讲一句,印象分直接拉满。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










