Java SE
本系列为本人学习情况记录,部分资料来自老师课件或书籍摘录。
继承和多态
继承
用来扩展父类
- 使用super关键字调用父类构造方法
- 默认会先调用父类构造,再执行子类构造
- 构造方法不可被继承
- Java中只能继承一个父类
- 父类私有属性在子类中不能直接访问
- 继承关系 - 是一种"is-a"关系:父类和子类必须存在这样的关系
- 如果手动调用了父类带参构造,会覆盖默认调用的父类构造
- 当父类没有默认构造时,不调用父类带参构造的子类构造会报错
重写
@Override 用来检测当前方法的重写是否合法
- 方法重写发生在通过继承而相关的不同类中
- 方法重写具有同样的方法签名、参数列表和返回值类型
- 被子类重写的方法不能拥有比父类更严格的访问控制权限
- 当子类重写父类的private方法时,看起来像是重写了方法,实际上只是一个新的方法,因为父类中的private方法在子类中根本无法访问到
多态
父类引用指向子类实现
同一个实体,同时具有多种形态
多态含义:多种形式
使用父类对象的地方,都可以使用子类对象、
同级子类型间不能互相转换
目标
利用方法的重写以及方法的调用机制增加程序的灵活性
概念
同一事物(父类引用)在不同条件下(子类对象)下,所表现出来的不同类型(父类引用对子类方法的调用)
语法:
父类 父类引用 = new 子类();
当调用的父类方法被子类重写过时,会调用子类重写的方法,而不是父类的方法
访问修饰符的权限
向上转型和向下转型
向上转型 使用父类的引用接收子类对象(多态第一 步)
向下转型使用子类的引用接收父类的引用,需要强制转换。转换前使用instanceof进行类型判断可以避免类型转换异常。
final关键字
表示对应结构不可变动
final修饰成员变量时可以不给初值,但必须在构造方法中赋初值
final修饰形式参数:
误区:
public void modify(final MyClass myClass){
//这里不报错因为 final修饰的是myClass这个值,它是个引用
//所以只要不修改引用,就不会报错
myClass.value++;
//报错:myClass = new MyClass();
}
static关键字
表示被修饰内容可以通过类名直接调用,或者在类型加载前执行
static成员,也称为类成员、类属性
而普通成员变量被称为对象属性