学习日记-day12-5.21
完成目标:
1.进行java上半段学习的总结
java小结(一)-CSDN博客
2.学习java课程下半段
知识点:
1.继承
知识点 | 核心内容 | 重点 |
继承概念 | 从生活实例(财产继承)引入编程中的继承概念,子类自动获得父类特性 | 继承与拥有的区别(能继承私有成员但不能使用) |
继承优势 | 减少代码重复(如teacher/manager类共享name/age/work),提升代码复用性 | 继承vs重复定义的取舍考量 |
继承语法 | 使用extends关键字实现继承(如class Teacher extends Employee) | 继承语句的书写规范 |
继承权限 | 子类可继承父类所有成员(包括私有),但只能使用非私有成员 | 继承权与使用权的区分(关键考点) |
设计思想 | 继承是OOP三大特征之一,属于代码架构设计理念 | 何时使用继承的判定标准 |
术语对照 | 父类(超类/基类) vs 子类(派生类) | 不同术语的对应关系 |
构造方法 | 构造方法不能继承(必须与类名绑定) | 继承体系中的构造方法调用顺序 |
2.成员变量 成员方法
知识点 | 核心内容 | 重点 |
成员变量访问特点 | 继承体系下,看等号左边是谁,先调用谁中的成员变量 | 成员变量访问与对象类型(父类或子类)的关系 |
不重名情况下,子类对象可访问父类成员变量 | 区分子类特有成员与继承成员 | |
重名情况下,子类对象访问的是子类自己的成员变量 | 父类与子类成员变量重名时的访问规则 | |
成员方法访问特点 | 继承体系下,看new的是谁,先调用谁中的方法 | 成员方法访问与对象实例化类型的关系 |
不重名情况下,子类对象可调用继承的父类方法 | 区分子类特有方法与继承方法 | |
重名情况下,子类对象调用的是子类自己的方法 | 父类与子类方法重名时的调用规则 | |
多态中的访问特点 | 父类引用指向子类对象时,成员变量看等号左边,成员方法看new的是谁 | 多态情况下成员变量与方法的访问规则 |
成员变量访问的是父类中的,成员方法调用的是子类中的(如果子类有重写) | 多态中成员变量与方法访问的特殊性 |
3.方法重写
知识点 | 核心内容 | 重点 |
方法重写的定义 | 子类中存在与父类方法名、参数列表完全相同的方法 | 易错点:返回值类型需兼容(协变返回类型) |
方法重写的检测 | 使用@Override注解,编译不报错即为合法重写 | 重点:注解报错说明方法签名不匹配父类 |
重写与重载的区别 | 重写需继承关系,重载仅需同名不同参 | 对比维度:重写覆盖父类行为,重载是同类多态 |
多态与继承的关系 | 多态前提是继承,成员方法调用规则与继承一致 | 核心逻辑:new子类对象时优先调用子类重写方法 |
方法重写注意事项
知识点 | 核心内容 | 重点 |
方法重写的权限要求 | 子类重写父类方法时,权限修饰符必须大于等于父类权限(public > protected > 默认 > private) | 默认权限不能显式写出default关键字,否则报错 |
访问权限修饰符等级 | Java四种权限修饰符从大到小:public → protected → 默认(不写) → private | 默认权限的实际表现与protected的区别 |
方法重写的基本规则 | 方法名和参数列表必须完全相同 | 与方法重载的对比(参数列表不同) |
不可重写的方法类型 | 私有方法(private)、构造方法、静态方法(static) | 静态方法加@Override注解会报错 |
返回值类型规则 | 子类方法返回值类型可以是父类方法返回类型的子类 | 父类返回父类型时子类可返回子类型,反之则报错 |
实际开发惯例 | 通常保持方法名、参数列表、返回类型完全一致 | 特殊返回值类型仅出现在测试/笔试场景 |
4.继承中构造方法的特点
知识点 | 核心内容 | 重点 |
继承中的构造方法特点 | 创建子类对象时,会先初始化父类(默认调用父类无参构造) | super()的隐式调用规则(不写则JVM自动添加,手动写必须在第一行) |
super关键字作用 | 代表父类引用,super()表示调用父类无参构造 | 与this()调用构造方法的优先级冲突 |
构造方法执行顺序 | 父类无参构造 → 子类构造方法(无论子类使用有参/无参构造) | 子类构造方法首行必隐含super()(若父类无无参构造需显式指定) |
代码示例逻辑 | 通过Father和Son类演示构造方法调用链 | 无参构造被注释后,有参构造仍隐式调用父类无参构造 |
5.super
知识点 | 核心内容 | 重点 |
super关键字 | 代表父类引用,用于调用父类成员(构造方法/变量/方法) | 必须在子类构造方法第一行使用 |
super调用构造方法 | 1. super()调用无参构造; 2. super(参数)调用有参构造 | 不写super()时默认调用父类无参构造 |
super调用成员变量 | super.变量名明确调用父类变量(避免子类同名变量覆盖) | 与this关键字的就近原则区别 |
super调用成员方法 | super.方法名(参数)强制调用父类方法(即使子类存在重写) | 方法重写时的调用优先级问题 |
this与super对比 | this指向当前对象,super指向父类对象 | 构造方法中this()和super()不能共存 |
继承中的构造链 | 子类构造必先调用父类构造(显式/隐式) | 父类没有无参构造时必须显式调用super(参数) |
6.this
知识点 | 核心内容 | 重点 |
this关键字的作用 | 代表当前对象,用于区分成员变量与局部变量、调用当前对象的成员(变量/方法/构造器) | 重名变量区分原则(就近优先局部变量); 构造器调用限制(必须在第一行) |
this调用构造器 | 通过this()调用无参构造,this(参数)调用有参构造 | 与super冲突(不可同时手写); 物理行限制(分号后不算第一行) |
this调用成员 | this.变量名访问成员变量; this.方法名()调用成员方法 | 非静态上下文(静态方法中不可用); 冗余场景(同类非静态方法可直接调用) |
this与super对比 | 均需在构造器首行使用; super指向父类,this指向当前实例 | 优先级冲突(无法共存); 隐式规则(未写super时默认存在) |
代码演示案例 | 通过Person类演示: - 构造器互相调用; - 输出成员变量(this.num); - 方法调用(this.method01()) | 就近原则验证(局部变量num=20覆盖成员变量); 构造链触发(new Person(10)触发双构造) |
7.继承特点
知识点 | 核心内容 | 重点 |
继承的单继承特性 | 一个子类只能有一个直接父类(如class A extends B合法,但class A extends B, C非法) | “单继承”与“多继承”的语法区别(Java不支持多继承) |
继承的多层继承特性 | 支持链式继承(如A→B→C,C可视为A的“祖父类”) | 多层继承中,子类可调用祖父类的非私有成员 |
父类与子类数量关系 | 一个父类可被多个子类继承(如A extends C和B extends C,A/B为“兄弟类”) | 与单继承规则对比:“一父多子”合法,“一子多父”非法 |
构造方法的继承限制 | 构造方法不能继承,也不能重写 | 子类需通过super()调用父类构造方法 |
私有方法的继承与重写 | 私有方法可继承但不能被重写(@Override会报错) | 易混淆点:私有方法在子类中可定义同名方法,但非重写 |
静态方法的继承与重写 | 静态方法可继承(子类可直接调用)但不能重写(@Override报错) | 静态方法绑定类而非对象,子类定义同名静态方法实为隐藏父类方法 |
8.父类私有属性赋值
知识点 | 核心内容 | 重点 |
父类私有属性的继承问题 | 子类无法直接使用父类的私有属性 (如 private String name 和 private int age),但可通过 getter/setter方法或构造方法间接访问。 | 私有属性继承的权限限制; - super调用父类构造方法的底层逻辑 |
通过getter/setter间接访问 | 子类通过父类提供的非私有方法 (如 getName()/setAge())操作私有属性,实现“曲线救国”。 | 方法继承与属性继承的区别; - 封装性保护与间接调用的平衡 |
通过构造方法间接赋值 | 子类构造方法中通过 super(name, age) 调用父类有参构造,间接为父类私有属性赋值。 | super关键字的执行顺序; - 构造方法链的调用逻辑 |
代码示例对比 | - 方法调用:teacher.setName("涛哥") + teacher.getAge(); - 构造方法:Manager("金莲", 24) → 触发父类 Employee(name, age) 赋值 | 两种方式的适用场景; - 间接访问的性能影响 |
9.抽象
知识点 | 核心内容 | 重点 |
抽象概念定义 | 抽象指“说不清道不明”的共性特征,需通过抽取共性方法形成父类 | 抽象与具体的区分标准 |
抽象方法 | 无方法体的方法(abstract修饰),需子类强制重写实现 | 抽象方法必须有子类实现,否则编译报错 |
抽象类 | 包含抽象方法的类必须为抽象类(abstract class) | 抽象类可无抽象方法,但抽象方法必在抽象类中 |
继承与抽象设计 | 通过父类(如图形类)定义标准,子类(三角形/圆形)实现差异化逻辑 | 继承为减少重复代码,抽象为强制统一接口 |
抽象类实例化限制 | 抽象类不能直接new对象,需通过子类实例调用重写方法 | 实例化报错的常见场景 |
抽象设计思想 | 将共性功能(如计算面积、eat())抽象为父类标准,子类按需实现 | 抽象类作为“事物标准”的实践意义 |
代码示例对比 | 图形类(抽象父类) vs 三角形类(子类实现底×高÷2) | 不同子类方法体的差异实现 |