super是直接父类对象
的引用
可以通过super
来访问父类中被子类覆盖的方法或属性
普通方法:
- 没有顺序限制。可以随便调用
构造函数中:
- 任何类的构造函数中,若是构造函数的第一行代码没有显示的调用
super(...);
那么Java会默认都会调用super();
作为父类的初始化函数。所以你这里的super();
加不加都无所谓。
package extand;
//父类
public class A {
String name;
public void eat(){
System.out.println("吃苹果");
}
}
代码语言:javascript复制package extand;
//子类
public class B extends A{
public void eat(){
super.eat();
}
}
代码语言:javascript复制package extand;
public class C {
public static void main(String[] args) {
B b = new B();
b.eat();
}
}
用途:
- 可以在子类中调用父类中被子类覆盖的方法
super.父类方法名称
- 当
super
在普通方法中使用的话,可以任意位置偏离 - 当
super
在构造方法中使用的话,会调用父类的构造方法,一定要将super
放在第一行 - 在构造方法中,
super
关键字和this
关键字不能同时出现 - 父类中的私有属性和方法都不能被调用,包括构造方法
- 子类的构造方法中都会默认使用
super
关键字调用父类的无参构造方法,因此在定义类的时候,无论自己是否定义了其他构造方法,最好将无参构造方法写上 - 如果构造方法中显示的指定了super的构造方法,那么无参的构造方法就不会被调用
小结:
- 在创建子类对象的时候一定会优先创建父类对象
- 所有的Java类都具备同一个祖宗类
Object
,是所有类的根类