- super关键字
1、关键字super可以用于两种途径:
调用父类的方法。
调用父类的构造方法。
图片例子:
2、语法格式:
super.属性名//访问父类的属性
super.方法名(参数);//调用父类的方法。
super(参数);//调用父类的构造方法。
//初始化当前对象的父类型特征
3、super能出现在实例方法和构造方法中,不能使用在静态方法中。且大部分情况下可以省略。
4、super()只能出现在构造方法第一行,通过当前的构造方法去调用、"父类"中其它的构造方法,目的是:代码复用(创建子类对象的时候,先初始化父类型特征)。
- 建议手动写无参构造方法
1、一个类如果没有手动提供任何构造方法,系统会默认提供一个无参数构造方法。
2、一个类如果手动提供了一个构造方法,那么无参数构造系统将不再提供。
3、重要的结论:
当一个构造方法第一行既没有this()又没有super()的话,默认会有一个super();表示通过当前子类的构造方法调用父类的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。 - 注意:this ()和super()不能共存,它们都是只能出现在构造方法第一行。
- 代码例子:
package com.zyh.demoSuper;
//父类
public class Fu {
int num = 10;
public void method(){
System.out.println("父类方法");
}
}
package com.zyh.demoSuper;
//子类
public class Zi extends Fu{
int num = 20;
@Override
public void method(){
super.method();//调用了父类方法
System.out.println("子类方法");
}
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
package com.zyh.demoSuper;
public class test {
public static void main(String[] args) {
Zi zi = new Zi();
zi.show();
zi.method();
}
}
- 内存图:
- 构造方法链
1、在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。当构造一个子类的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的构,造方法。如果父类继承自其他类,那么父类构造方法又会在完成自己的任务之前,调用它自己的父类的构造方法。这个过程持续到沿着这个继承体系结构的最后一个构造方法被调用为止。
2、父类的构造方法是一定会执行的。
例一:(其中对象只创建了一个)
例二:
new C();
输出结果:13654
- super什么时候不能省略?
父中有,子中又有,如果想在子中访问"父的特征",super.不能省略。 - super是什么?
super不是引用;super也不保存内存地址,;super也不指向任何对象。
super只是代表当前对象内部的那一块父类型的特征。