1、使用super可以访问父类的属性
public class Student extends Person{
private String name = "Mikkel";
public void test(String name){
// 使用super来直接访问父类的name
System.out.println(super.name);
// 使用super来调用父类的方法
super.test();
}
}
// 在继承关系中,子类直接继承父类的所有方法
// 故也可以使用对象来调用父类的方法
2、super()构造器的执行逻辑
// 子类
public class Student extends Person {
private String name = "Mikkel";
public Student(){
System.out.println("Student无参构造器执行...");
}
}
// 父类
public class Person {
public String name = "none";
public Person(){
System.out.println("Person无参构造器执行...");
}
}
// 应用程序
public class Application {
public static void main(String[] args) {
Student student = new Student();
}
}
代码执行后输出:
Person无参构造器执行...
Student无参构造器执行...
在子类的构造器中会首先调用父类的构造器,父类的构造器在子类构造器中被隐藏起来,完整代码如下:
public Person(){
super(); // 父类的无参构造器 -- 且只能放在子类构造器中的第一行
System.out.println("Person无参构造器执行...");
}
3、总结
注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现子类的方法或者构造方法中
- super 和 this 不能同时调用构造方法
与this的差异
-
代表对象不同
this: 本身调用这个对象
super:代表父类对象的应用
-
前提
this:没有继承也可以使用
super:只能在继承条件才可以使用
-
构造方法
this():本类的构造
super():父类的构造