在之前的文章,我们分别介绍了类与对象、面向对象三大特征之一封装、以及上一文大体讲完了继承。这一篇文章我们接着补充继承的知识点和特殊关键字。
子类的构造方法
注意子类不会继承父类的构造方法。
(上一文讲到子类继承父类,除了构造方法的部分,剩下的都会继承。)
下面讲述建立一个子类对象时,构造方法的执行过程。
执行构造方法
- 先有父再有子,即构造子类对象时,先执行父类的构造方法,再执行子类的构造方法。
- 子类对象可分为两部分,继承父类的部分和子类拓展添加的部分 。先执行父类构造方法构造继承部分,再执行子类构造方法构造拓展部分,实现完整。
注意
- 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类的构造方法。
- 若父类构造方法是带有参数的,此时需要用户为子类显式定义的构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
- 在子类的构造方法中,super(…)调用父类构造时,必须是子类构造方法中的第一条语句。(毕竟要先执行父类构造方法,再执行子类)
- super(…)只能在子类构造中出现一次,并且不能和this同时出现。
super 关键字
- super关键字的作用:访问父类中的成员变量和方法。
- 使用情况:出现子类与父类存在同名的成员时,若想在子类方法中访问父类成员,就可以使用super关键字。
- 使用范围:在子类的方法中,并且是非静态的方法。
- 注意:不要以为把super误以为是父类对象。在创建子类对象时, 不会创建父类对象. 只会将父类中的信息加载到子类对象中存储.
- 使用形式:
- super.成员变量名 来 引用父类成员变量。
- super.方法名(参数列表) 访问 父类的方法。
- super.构造方法(参数列表) 访问 父类构造方法。
this关键字:对类的当前实例的引用,用于访问当前对象的实例变量、调用当前对象的方法,以及在构造方法中调用其他重载的构造方法
super与this的共同点
- 都是Java的关键字
- 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
- 在构造方法中使用时,必须是构造方法中的第一条语句,并且不能同时存在
super与this的不同点
- this是对当前对象的引用,当前对象是指调用实例方法的对象。
- super是子类对父类继承下来的部分成员的引用。
- 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类的方法与属性。
- 在构造方法中:this(…)用来调用本类的构造方法,super(…)用来调用父类的构造方法,两种调用不能同时在构造方法中出现。
- 构造方法中一定会存在super(…)的调用,用户没有写编译器也会增加,而this(…)不写则没有。
final关键字
final可以修饰:变量 、 成员方法 和 类
- 修饰变量和字段时,表示为常量(无法修改)。
- 修饰类,表示该类无法被修饰。
- 修饰方法,表示该方法无法被重写。
protected关键字
- 成员可见性:被protected关键字修饰的成员可以被同一包内的其他类访问,以及继承该类的子类访问。
- 访问权限范围:同一个包内的不同类,以及继承该类的子类(子类无所谓是否在同一个包中)。
下面是《Java面向对象三大特征》这几篇文章的参考链接:
(1) (2) (3) (4) (5)
(6) (7) (8) (9) (10)
(11) (12) (13) (14)