阶段二:面向对象编程(OOP)—— 核心知识点总纲
本阶段涵盖:面向对象基础、构造方法与单例、继承与方法重写、抽象类/final/接口、多态与内部类、匿名内部类与常用 API
细分文档:按日细分/20260720-笔记.md ~ 按日细分/20260727-笔记.md
学生需要重点理解、背诵、掌握的理论核心知识点。
一、面向对象基础(对应 07-20)
1. 类与对象
- 类 = 模板/图纸(抽象);对象 = 实体(具体);1 个类 → 多个对象
- 类包含:成员变量(属性)+ 成员方法(行为,无 static)
- 创建对象:
类名 对象名 = new 类名();;调用成员:对象名.成员
2. 成员变量 vs 局部变量(四大区别必背)
| 维度 |
成员变量 |
局部变量 |
| 位置 |
类内方法外 |
方法内(含参数) |
| 内存 |
堆 |
栈 |
| 生命周期 |
随对象 |
随方法 |
| 默认值 |
有默认值 |
必须先赋值 |
3. 对象引用共享
多个引用指向同一对象时,修改互相影响(Teacher t2 = t1; 后 t2 改 t1 也变)。
4. 封装(必背)
- 三大特性:封装、继承、多态
- 封装两步走:
private 属性 + public 的 setter(含校验)/ getter
- 访问修饰符:
public(所有)、private(本类)、default(同包)、protected(同包+子类)
- this 关键字 = 当前对象引用;参数与成员同名时用
this.成员 区分(setter 中不能省略)
5. 包(Package)
- 相当于文件夹;域名倒写命名(
com.lovecoding.day01)
- 声明在源文件第一行;包名与目录一致;同包免 import
二、构造方法与单例模式(对应 07-21)
构造方法 10 大要点(必背)
- 方法名 = 类名(大小写相同)
- 无返回值类型(连 void 都不写)
- 不能 return 返回值
- 创建对象时自动调用(不能手动调用)
- 每个类默认有隐藏无参构造
- 显式定义后默认构造被覆盖
- 可重载(参数列表不同即可)
- 默认构造权限与类一致
- private 构造可阻止外部创建对象(单例模式铺垫)
this(参数) 调用本类构造(必须第一行)
经典算法
- Fisher-Yates 洗牌:从后往前遍历 + 随机交换
- 回文数:逐位取余反序与原数比较
- setter 校验:业务规则在 setter 中校验
三、继承与方法重写(对应 07-22)
1. 继承概念
class 子类 extends 父类;关键字 extends = 扩展
- 好处:复用、可维护、建立关系;弊端:耦合性增强
- 使用前提:is...a 关系(学生是人的一种 ✓)
2. 方法重写 Override(必背)
- 子类与父类方法签名完全一致(方法名+参数列表+返回值类型)
@Override 注解可选但推荐
- 重写(父子类)vs 重载(同类):重载方法名相同参数不同
3. super 关键字(必背)
super.方法() 调父类被重写方法;super.属性 访问父类同名属性;super() 调父类构造
4. Java 继承限制(必背)
- 单继承(一个子类只能一个直接父类)
- 多层继承(Son → Dad → Granddad)
- Object 是所有类的根父类
5. 访问修饰符在继承中
private 不可继承;protected 子类可访问(异包子类 ✅)
6. 变量就近原则(必背)
局部 → 本类成员 → 父类成员 → 祖父类成员 → …… → Object,都没找到编译报错
7. this vs super(必背)
- this = 本类引用;super = 父类引用
- 变量/方法/构造三场景对应:
this.成员 vs super.成员、this() vs super()
- ⚠️
this() 和 super() 必须第一行、不能同时出现
8. 继承中构造方法(必背)
- 子类构造默认第一句 super()(先完成父类对象创建)
- 父类没有无参构造 → 子类必须手动
super(参数)
super(参数) 必须在第一行
四、抽象类、final 与接口(对应 07-23)
1. 抽象类(必背)
- 无方法体的方法 → 抽象方法;含抽象方法的类 → 抽象类(
abstract 关键字)
- 抽象类不能实例化;可以有构造方法(供 super 调用)
- 子类:①重写所有抽象方法 ②子类也是抽象类
- 抽象类不一定有抽象方法,但抽象方法必须在抽象类中
2. final 关键字(必背)
| 修饰 |
作用 |
| final 类 |
不能被继承(String、Math、Integer) |
| final 方法 |
不能被重写 |
| final 变量 |
变成常量(全大写+下划线命名) |
- final 修饰引用:引用地址不可变,对象内容可改
- ⚠️ final 和 abstract 不能同时使用(语义冲突)
3. 模板方法设计模式
父类定义骨架(模板方法 final 修饰)+ 子类实现步骤(抽象方法)
4. 代码块执行顺序(必背)
静态代码块(类加载一次)→ 构造代码块(每次 new、构造前)→ 构造方法
5. 接口(必背)
- 解决单继承局限:单继承 + 多实现
- 接口成员:变量默认
public static final;方法默认 public abstract
- 接口不能实例化、没有构造方法
- 实现:
implements;可继承父类 + 实现多接口
- 抽象类 vs 接口:抽象类可有构造/任意成员/单继承;接口无构造/只常量抽象方法/多实现
6. 接口 JDK 版本演进(必背)
| 版本 |
新增 |
说明 |
| JDK8 |
默认方法 default |
有方法体,实现类不强制重写,重写时去掉 default |
| JDK8 |
静态方法 static |
接口名直接调用 |
| JDK9 |
私有方法 private |
抽取默认/静态方法公共代码 |
五、多态与内部类(对应 07-24)
1. 多态(必背)
- 同一个对象在不同时刻表现不同形态
- 前提三条件:①继承或实现 ②方法重写 ③父类引用指向子类对象
- 成员访问:编译看左边,运行看右边(方法);成员变量看父类
- 好处:提高扩展性(开闭原则);USB 接口案例
2. 多态中的转型(必背)
- 向上转型:
Person p = new Student();(自动)
- 向下转型:
(Student) p(前提先向上转型);用于调用子类特有方法
- instanceof:
对象 instanceof 类型 返回 boolean,向下转型前安全判断
3. 内部类(了解)
- 类中定义类(心脏之于人);内部类可访问外部类所有成员(含 private)
- 成员内部类:
外部类.内部类 对象 = new 外部类().new 内部类();
- 设计原则:内部类私有化 + 外部类公共方法暴露
- 静态内部类、局部内部类(了解)
六、匿名内部类与常用 API(对应 07-27)
1. 匿名内部类(必背)
- 本质:继承了某个类或实现了某个接口的子类的匿名对象
- 语法:
new 类/接口() { 重写方法 }
- 三种使用:①多态接收 ②作方法参数传递(最常用) ③直接调用(只能一次)
- 应用:实现类仅用一次时避免建独立文件、临时逻辑
2. String 字符串(必背)
内存模型:
| 创建方式 | 位置 | 特点 |
|----------|------|------|
| 直接赋值 | 字符串常量池 | 序列相同则同一对象 |
| new String() | 堆内存 | 每次 new 新对象 |
== 比较地址、equals() 比较内容(String 已重写)
- 常用方法:
equals/equalsIgnoreCase、length/charAt、substring/indexOf/contains/startsWith/endsWith、toUpperCase/toLowerCase/trim/split/replace
- String 不可变(final 类);频繁拼接用
StringBuilder(单线程,性能高)/ StringBuffer(线程安全)
3. Math 类(全静态,类名调用)
abs/max/min/pow/sqrt/ceil/floor/round/random/PI
4. 日期时间(JDK8 后推荐)
LocalDate/LocalTime/LocalDateTime + DateTimeFormatter
LocalDate.of(y,m,d)、plusDays(5) 返回新对象、format(formatter)
本阶段必须背诵的核心口诀
- 类是模板、对象是实体;一个类可造多个对象
- 成员变量在堆、局部变量在栈、局部必须先赋值
- 封装两步走:private 属性 + public setter/getter
- this = 当前对象,super = 父类对象;this()/super() 第一行且不同时出现
- 重写(父子类签名一致)vs 重载(同类方法名同参数不同)
- 单继承、多层继承、一切类根 Object
- 变量就近原则:局部 → 本类 → 父类 → …… → Object
- 子类构造默认 super();父类无无参构造必须手动 super(参数)
- 抽象类不能 new;接口只有常量和抽象方法;单继承 + 多实现
- 多态口诀:编译看左边、运行看右边
- 匿名内部类 = 继承/实现某类接口的匿名子类对象
- String 用 equals 比较内容;String 不可变、拼接用 StringBuilder