super和super()
super代指父類,而super()代指父類無參構造函數。具體用法如下:
用super在子類中得到父類的成員變量
//父類代碼
public class Fu {
int age =50;
}
//子類代碼
public class Zi extends Fu{
int age = 22;
public void show() {
int age = 0;
System.out.println(age);
System.out.println(this.age);
System.out.println(super.age);
}
}
//測試類代碼
public class Demo {
public static void main(String[] args) {
Zi zi1 = new Zi();
zi1.show();
}
}
輸出結果如下:
結論
1、子類中的輸出的age采取就近原則:局部變量>成員變量>父類成員變量
2、this指代本類,super指代父類
接下來說說輸出的第一行“父類無參”是咋回事
用super()在子類中得到父類的構造函數
始終記得沒有構造方法默認無參,自定義構造方法就沒有默認的無參了(值得細品)
//父類代碼
public class Fu {
int age =50;
public Fu() {
System.out.println("父類無參");
}
public Fu(int age) {
System.out.println("父類有參");
}
}
//子類代碼
public class Zi extends Fu{
int age = 22;
public Zi() {
super(12);
System.out.println("子類無參");
}
public Zi(int age) {
super();//默認調用父類無參構造函數,可不寫!!(不寫的前提:父類 至少有 無參構造函數)
System.out.println("子類有參");
}
}
//測試類代碼
public class Demo {
public static void main(String[] args) {
Zi zi1 = new Zi();
Zi zi2 = new Zi(20);
}
}
輸出結果如下:
結論
1、父類至少有 無參構造函數時子類構造函數自動調用其父類無參構造函數( super() )。
2、若要調用父類有參構造函數需明寫super(……)。