Java中Super()與this()
super指父類,this指當(dāng)前對象
super()與this()都必須在構(gòu)造函數(shù)第一行,一個構(gòu)造函數(shù)不能同時有super()和this(),子類的構(gòu)造函數(shù)都隱式地調(diào)用super(),super()與this()都不能在static環(huán)境中使用(父類的static方法不能被繼承),從本質(zhì)上講,this是一個指向本對象的指針,super是一個java關(guān)鍵字。
舉例說明:
父類:
public class Father {
public Father(){
System.out.println("Father");
}
public Father(String str) {
System.out.println(str+" in Father");
}
}
子類:
public class Son extends Father {
public Son(){
//隱式調(diào)用super()
System.out.println("son");
}
public Son(String str){
System.out.println(str+" in Son");
}
public static void main(String[] args){
Son son = new Son();
}
}
輸出結(jié)果是:
Father
Son
父類:
public class Father {
public Father(){
System.out.println("Father");
}
public Father(String str) {
System.out.println(str+" in Father");
}
}
子類:
public class Son extends Father {
public Son(){
this("Test");
//這里由于this的存在,不會再隱式調(diào)用super()
System.out.println("son");
}
public Son(String str){
//仍然隱式調(diào)用super(),而不是隱式調(diào)用super(str)
System.out.println(str+" in Son");
}
public static void main(String[] args){
Son son = new Son();
}
}
輸出結(jié)果是:
Father
Test in Son
son
父類:
public class Father {
public Father(){
System.out.println("Father");
}
public Father(String str) {
System.out.println(str+" in Father");
}
}
子類:
public class Son extends Father {
public Son(){
this("Test");
//這里由于this的存在,不會再隱式調(diào)用super()
System.out.println("son");
}
public Son(String str){
super(str);
//顯示調(diào)用super(str),而不再隱式調(diào)用super()
System.out.println(str+" in Son");
}
public static void main(String[] args){
Son son = new Son();
}
}
輸出結(jié)果是:
Test in Father
Test in Son
son
父類中如果存在成員函數(shù),可在子類中使用super.function()的形式調(diào)用父類的成員函數(shù)function().