Skip to content

02 — 面向对象核心索引

定位: OOP 三大特性 + 抽象类/接口/内部类 — Java 管理复杂度的核心思想工具 面试高频度: ⭐⭐⭐⭐⭐

一、板块在体系中的位置

┌─────────────────────────────────────────────────────────────┐
│                    OOP 在 Java 中的角色                       │
│                                                              │
│   01-语言基础  (类型系统 → 程序的"名词")                       │
│       │                                                      │
│       ▼                                                      │
│   02-面向对象  (封装/继承/多态 → 程序的"组织方式")  ← 在这里    │
│       │                                                      │
│       ├──→ 03-集合框架   (OOP 的典型应用 — 接口/实现分离)      │
│       ├──→ 04-泛型与注解  (对类型的进一步抽象)                  │
│       └──→ 设计模式     (OOP 原则的具体实践)                   │
└─────────────────────────────────────────────────────────────┘

二、知识全景图

┌─────────────────────────────────────────────────────────────┐
│              Java 面向对象核心全景图                           │
│                                                              │
│  ┌──────────────────────────────────────────────┐           │
│  │           面向对象三大特性                       │           │
│  │                                                │           │
│  │  封装 ─── 隐藏实现,暴露接口 → 降低复杂度         │           │
│  │  继承 ─── 代码复用,is-a 关系 → ⚠️ 过度使用問題   │           │
│  │  多态 ─── 同一接口不同实现 → 框架设计的基石       │           │
│  └──────────────────────────────────────────────┘           │
│                                                              │
│  ┌──────────────────────────┐ ┌────────────────────────┐    │
│  │  抽象类 vs 接口            │ │     内部类              │    │
│  │                          │ │                        │    │
│  │  抽象类:模板方法模式       │ │  成员内部类 → 访问外部类 │    │
│  │  接口:契约设计+多重继承    │ │  匿名内部类 → 简化回调   │    │
│  │  JDK8+ 接口升级(default)   │ │  静态内部类 → 辅助类    │    │
│  └──────────────────────────┘ └────────────────────────┘    │
│                                                              │
│  ┌──────────────────────────────────────────────────────┐   │
│  │  核心考点:                                            │   │
│  │  ① 多态的实现原理(静态分派 vs 动态分派)               │   │
│  │  ② 抽象类 vs 接口的应用场景选择 + Java 8 接口变化       │   │
│  │  ③ 内部类为什么持有外部类引用(非静态内部类)             │   │
│  └──────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

三、子专题导航

#主题面试频率核心内容
**三大特性(封装继承多态)**三大特性⭐⭐⭐⭐⭐封装动机、继承的利与弊、多态的实现原理(虚方法表)
**抽象类与接口**抽象类与接口⭐⭐⭐⭐⭐设计动机差异、JDK8+ 接口进化、如何选择
**内部类与匿名类**内部类与匿名类⭐⭐⭐为什么需要内部类、持有外部类引用的机制、编译后结构

四、核心考点速记

考点 1:多态的实现原理

编译时(静态分派):
  obj.method(args) → 根据"声明类型"确定方法签名(重载)

运行时(动态分派):
  obj.method() → 根据"实际类型"在虚方法表中查找具体实现(重写)

例子:
  Animal a = new Dog();
  a.makeSound();   // 编译看 Animal,运行看 Dog 的方法表

考点 2:抽象类 vs 接口选择

场景选抽象类选接口
核心是"是什么"(is-a)✅ 模板方法
核心是"能做什么"(can-do)✅ 契约设计
需要共享状态(字段)
需要多重继承
JDK8+ 有默认方法

五、面试高频追问一览

追问关联笔记频次
Java 是单继承,怎么实现类似多继承的效果?**抽象类与接口**⭐⭐⭐⭐⭐
静态方法能重写吗?private 方法呢?**三大特性(封装继承多态)**⭐⭐⭐⭐
内部类为什么可以访问外部类的 private 字段?**内部类与匿名类**⭐⭐⭐
Java 8 为什么要在接口中引入 default 方法?**抽象类与接口**⭐⭐⭐⭐

📚 相关文件

  • **01-语言基础** — OOP 的类型基础
  • **集合索引** — OOP 接口/实现分离的典型应用
  • **Java文库设计文档** — 返回总纲

Knowledge4J — Java 知识库