super关键字的三种用法
1.super可以用来引用直接父类成员变量。 super.父类成员变量;
2.super可以用来调用直接父类成员方法。 super.父类成员方法(参数列表);
3.super()可以用于调用直接父类构造函数。 super(参数列表); //只能写在子类的构造方法中
super可以理解为父类的,super可以用来调用属性、方法、构造器。我们可以在子类的方法或构造器中,通过使用“super.属性”或“super.方法”的方式,显示调用父类中声明的属性和方法,但通常情况下,我们习惯省略super。当然有的地方不能省略:1. 当父类与子类定义了同名属性时,我们想调用父类生命的属性时,则必须显示使用“super.属性”的方式,表明调用的是父类中声明的属性
2.当子类重写了父类的方法以后,我们想在子类的方法中调用父类被重写的方法时必须使用“super.方法”的方式表明调用的是父类中被重写的方法
super使用代码如图:
2、super和this对比:
this:
this能出现在实例方法和构造方法中。
this的语法: “this.” 、 “this ()”
this不能使用在静态方法中。
this.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。
this () 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中其他的构造方法,目的是:代码复用。
super:
super能出现在实例方法和构造方法中。
super的语法: “super.” 、 “super ()”
super不能使用在静态方法中。
super.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。
super () 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,目的是:代码复用。 目的是:创建子类对象的时候,先初始化父类型特征。
3、this()和super()不共存。
4、super () 表示通过子类的构造方法调用父类的构造方法。
5、重要结论:
当一个构造方法第一行:
既没有this()又没有super()的话,默认会有一个super();
表示通过当前子类构造方法调用父类的无参数构造方法。
所以必须保证父类的无参数构造方法是存在的。
6、父类的构造方法是一定执行。