supe主要是调用父类中被重写的方法及属性。
用下列代码那说明:
package cn.hcf.TestSuper; public class TestSuper {
public static void main(String[] args){
Student stu = new Student();
stu.task();
}
} class Person{
int ID;
void task(){
ID = 100;
System.out.println("工作");
}
} class Student extends Person{
int ID;
void task(){ //task方法已被子类重写
ID = 200;
super.task(); //通过super调用父类中的task方法,应打印“工作”。
System.out.println("学习");
System.out.println("Person:" + super.ID + "\n" + "Student:" + ID); //super是父类中ID的值应为100
}
}
运行结果:
工作
学习
Person:100
Student:200
还有一个知识点就是,所有类的第一句都隐含一个super(),写于不写(不写编译器会自动加上)都是这句话。;意思是调用父类的无参构造方法。
用下面代码说明:
package cn.hcf.TestSuper; public class TestSuper {
public static void main(String[] args){
Student stu = new Student(); }
} class Person{
public Person(){
//super(); 隐含的
System.out.println("Person");
}
} class Student extends Person{
//super(); 隐含的
public Student(){
System.out.println("Student");
}
}
运行结果:
Person
Student
我们会发现,我们只创建了一个Studetn类的对象,应该只调用Student的无参构造方法,可是最后它也调用了Person的无参构造方法。
这是因为每一个类的第一句都隐含了一句super();所以是层层向上追溯,直到Oject类。
所以以我们这代码为例,层层向上追溯,最先创建好的是Object,然后创建Person,person包裹object,再创建Student,student包裹person,这样层层包裹。