JAVASE-------继承+Super关键字+方法重写+Final关键字
继承
继承
什么时继承:
- 子类继承父类的成员(成员方法,成员变量)
继承怎么实现:
- 使用关键字 extents
- class 子类名 extends 父类名{}
特点:
Java中只支持单继承
支持多层继承(c继承b,b继承a)
注意事项:
只能继承父类非私有的成员(成员变量和成员方法)
不能继承父类的构造方法
继承的好处:
提高了代码的维护性
提高了代码的复用性
多态实现的前提
继承的弊端:
类的耦合性增强
程序设计原则:高内聚(一个类独立完成某个功能的能力),低耦合(类与类之间的关系)
继承中成员变量的关系
- 子类成员变量和父类成员变量名称不一样时,直接继承
- 子类成员变量和父类成员变量名称一样时,在子类中采取就近原则
- 在子类的方法的局部范围找,有就使用
- 在子类的成员范围找,有就使用
- 在父类的成员范围找,有就使用
- 如果还找不到,就报错
关键字 Super
super
代表父类的空间的一个标识,使用super访问父类的数据
super() 访问父类的空参构造
super.成员变量名 访问父类的成员变量
super.成员方法 访问父类的成员方法
在每个类的构造方法的第一行,有一行默认语句super(),会去调用父类的空参构造,来完成父类数据的初始化
this
代表本类的一个引用
this() 访问本类的空参构造
this.成员变量 访问本类的成员变量
this.成员方法 访问本类的成员方法
this()和super()不能同时存在在构造方法里面
两者的使用
调用成员变量
- this.成员变量 调用本类的成员变量
- super.成员变量 调用父类的成员变量
调用构造方法 - this(…) 调用本类的构造方法
- super(…) 调用父类的构造方法
调用成员方法 - this.成员方法 调用本类的成员方法
- super.成员方法 调用父类的成员方法
创建子类对象时,为什么会先调用父类的构造方法?
因为子类要继承父类的数据,甚至要使用父类的数据,所以,在初始化子类时,想要调用父类的构造方法,来完成父类数据的初始化,这样子类才能继承父类的数据和使用父类的数据
继承中代码块的运行顺序
方法重写
当子类出现了和父类一模一样的方法时(返回值类型,方法名,方法参数一样),这个时候会发生方法覆盖的现象,子类的方法会覆盖父类的方法
为什么要有这种机制:
子类对父类的方法不满意,想要自己实现或拓展某些方法
注意事项:
父类私有的方法,不能重写
构造方法不参与重写
子类在重写父类的方法时,方法的权限修饰符,不能比父类的低,要么一样,要么高
静态方法不参与重写
父类final修饰的方法子类不能重写
快捷键: ctrl+o 快速生成重写方法
关键字 final
当我们不想让子类去重写父类方法时,可以给父类的方法加上final,让子类无法重写
final
最终的, 可以修饰变量,方法,类
修饰变量时,此变量变为常量
修饰方法时,此方法不能被重写
修饰类时,此类不能被继承
修饰基本类型时,值不能被再次改变
修饰引用类型时,地址值不能被再次改变