java中super的用法
阿新 • • 發佈:2019-01-02
轉載:http://www.cnblogs.com/java-class/archive/2012/12/20/2826499.html
今天要總結的是 super 這個關鍵字的使用,super 在建構函式中出現的時候一般是當前這個類繼承了其他的類,super 的出現就是為了呼叫父類的建構函式,貼段程式碼先
1 class Tiger { 2 int age; // 年齡 3 int hight; // 身體高度 4 5 public Tiger() { 6 print(); 7 } 8 9 public void print() { 10 System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!"); 11 } 12 } 13 public class JavanTiger extends Tiger { 14 public JavanTiger() { 15 super(); // 呼叫父類無引數的建構函式 16 } 17 public static void main(String[] args) { 18 new JavanTiger(); 19 } 20 }
其實在類JavanTiger 中的建構函式中的 super()可以不寫,JAVA會預設呼叫父類的無引數的建構函式,但如果父類沒有定義無引數的建構函式,沒有語法錯誤,程式會自動退出,沒有任何列印語句,這時候你需要手動呼叫其他父類的建構函式,貼段程式碼:
1 class Tiger { 2 int age; // 年齡 3 int hight; // 身體高度 4 5 public Tiger(int age) { 6 this.age = age; 7 print(); 8 } 9 public void print() { 10 System.out.println("I'am a " + age + "歲 " + hight + "尺高 tiger!"); 11 } 12 } 13 public class JavanTiger extends Tiger { 14 public JavanTiger() { 15 super(1); // 呼叫父類有引數的建構函式 16 } 17 public static void main(String[] args) { 18 new JavanTiger(); 19 } 20 }
這段程式碼中的 super(1)必須要寫進去,否則編譯器會報錯。所以我簡單的總結了一下,“this()是呼叫自己其他的建構函式,super()是呼叫自己繼承的父類的建構函式“,如果只想呼叫預設無引數的父類建構函式,不用在子類的建構函式當中寫出來,但是實際程式設計的時候,總是會忽略這一點。
那門這兩個關鍵字能不能同時出現在子類的一個建構函式當中納?答案肯定是不能。先說下自己的理解:
1)在新建一個基類的時候,不論遞迴呼叫幾次自身的建構函式,最終你都會去呼叫父類的建構函式,(不是顯式呼叫的話,系統會呼叫預設無引數的父類建構函式);
2)JAVA 中規定使用 this 和 super 時必須放在建構函式第一行,只有一個第一行;