關鍵字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(參數列表)語句指定調用本類或者父類中相應的構造器,且必須放在構造器的第一行
- 如果子類構造器中既沒有顯示調用父類或者本類的構造器,切父類中又沒有無參的構造器,則編譯出錯