- super调用属性或方法:
- 在子类中使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但通常情况下,我们习惯省略"super."
- super的追溯不仅限于直接父类的内存空间标识,调用特有方法可以不用+this()或者super(),会自动向上追溯,仅当直接父类和间接父类(Object)都有相同特有方法,优先调用直接父类
- super调用构造器:
- 在子类的构造器中默认使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
- "super(形参列表)"必须声明在子类构造器的首行!没有显式的声明则默认调用的是父类中空参的构造器:super()
- 在子类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)"调用父类中的构造器
- "this(形参列表)"或"super(形参列表)"只能二选一
点击查看**父类Person**代码
public class Person {
String name;
int age;
int id = 610;//身份证号
public Person(){
System.out.println("Person()——super()无处不在!");
}
public Person(String name){
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
public void sleep(){
System.out.println("人都缺觉");
}
}
点击查看**子类Student**代码
public class Student extends Person {
String major;
int id = 20722028; //学号
public Student(){
//super(); 默认省略
}
public Student(String major){
//super(); 默认省略
this.major = major;
}
public Student(String name,int age,String major){
super(name,age); //调用public Person(String name,int age)
this.major = major;
}
@Override
public void sleep() {
super.sleep(); //追溯
System.out.println("所以学生多睡觉长得高");
}
public void study(){
System.out.println("学生 为中华民族伟大复兴而读书");
}
public void show(){
System.out.println("name = " + name + ", age = " + age);
System.out.println("身份id = " + super.id);
System.out.println("学号id = " + this.id);
}
}
public class StudentSuperTest {
public static void main(String[] args) {
System.out.println("************");
Student s = new Student();
s.show(); //name = NULL,age = 0;
s.sleep();
System.out.println();
System.out.println("************");
Student s1 = new Student("Liuzhen", 23, "Math");
s1.show();
System.out.println();
System.out.println("************");
Student s2 = new Student(); //Person()——super()无处不在!
}
}
RunResult:

浙公网安备 33010602011771号