super关键字的使用:
- super的理解为:父类的
- super可以用来调用:属性、方法、构造器。
super调用属性和方法:
- 当子类和父类中定义了同名的属性时,在子类中调用父类中声明的属性,则必须显示的使用"super.属性"的方式,表明调用的是父类中声明的属性
class PerSon{
int age = 21;
}
class Man extends PerSon{
int age = 19;
void show(){
System.out.println(super.age); //调用父类的age
}
}
class SuperTest{
public static void main(String[] args) {
Man man = new Man();
man.show();
}
}
结果
21
- 当子类重写了父类中的方法以后,在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法
class PerSon {
void show() {
System.out.println("person");
}
}
class Man extends PerSon {
@Override
void show() {
super.show(); //调用父类的show方法
System.out.println("man");
}
}
class SuperTest2 {
public static void main(String[] args) {
Man man = new Man();
man.show();
}
}
结果:
person
The man
super调用构造器:
- 在子类的构造器中可以显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
- "super(形参列表)"的使用,必须声明在子类构造器的首行.
- 在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现
- 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器
- 在构造器的首行,没有显式的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器
class PerSon {
public PerSon() {
System.out.println("Person");
}
}
class Man extends PerSon {
}
class SuperTest2 {
public static void main(String[] args) {
Man man = new Man();
}
}
结果:
person