1. 程式人生 > >java中super的用法

java中super的用法

轉載: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 時必須放在建構函式第一行,只有一個第一行;