关键字super
在Java类中使用super来调用父类中的指定:
- super可用于访问父类中定义的属性
- super可用于调用的父类中定义的成员方法
- super可用于在子类构造方法中调用父类的构造器
注意:
- 尤其当子父类出现同名成员时,可以用super进行区分
- super的追溯不仅限于直接父类(super不仅可以调用父类,还可调用父类的父类)
- super和this的用法很相像,this代表本类对象的引用,super代表父类的内存空间的表示
public class kk extends Kids{
public void text(){
super.salary = 1;//salary为kids的父类ManKind中的成员变量
super.yearsOld = 100;//yearsOld为Kid的成员变量
super.employeed();//可以用super追溯父类的成员方法
super.manOrWorman();//可以使用super向上追溯父类的父类的成员方法
}
}
public class Kids extends ManKind {
public int yearsOld;
public int getYearsOld() {
return yearsOld;
}
}
public class ManKind {
public int sex;
public int salary;
public void manOrWorman(){
}
public void employeed(){
}
}
public class kid extends man {
public void show(){
super.showInfo();
}
public static void main(String[] args) {
kid k = new kid();
k.show();
}
}
public class man {
String name = "sa";
int age =10;
public void showInfo(){
System.out.println("name"+name+"age"+age);
}
}
调用父类的构造器
- 子类中所有的构造器默认都会访问父类中空参数的构造器
public class man {
String name = "sa";
int age =10;
public man(){//显式无参构造
System.out.println("mankind");
}
// public void showInfo(){
// System.out.println("name"+name+"age"+age);
// }
}
public class kid extends man {
// public void show(){
// super.showInfo();
// }
public static void main(String[] args) {
kid k = new kid();//new kid()是在调用kid类的默认无参构造方法,在这个过程中就会使用父类的无参构造
}
}
//相当于下面
public class man {
String name = "sa";
int age =10;
public man(){//显式无参构造
System.out.println("mankind");
}
// public void showInfo(){
// System.out.println("name"+name+"age"+age);
// }
}
public class kid extends man {
public kid(){
super();
}
// public void show(){
// super.showInfo();
// }
public static void main(String[] args) {
kid k = new kid();//new kid()是在调用kid类的默认无参构造方法,在这个过程中就会使用父类的无参构造
}
}
- 当父类中灭有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
- 如果子类构造器中既没有显示调用父类或者本类的构造器,切父类中又没有无参的构造器,则编译出错