1. 程式人生 > >Java 中的super關鍵字

Java 中的super關鍵字

super關鍵字表示對某個類的父類的引用。一般而言,super有兩種通用形式:第一種用來訪問被子類的成員隱藏的父類成員;第二種則是可以呼叫父類的建構函式。接下來說一下兩種使用形式的方法和規則。

第一種:

如子類和父類有同名的成員變數或方法,則父類的成員將會被覆蓋,此時可用下面的方式來引用父類的成員:

super.<成員變數名>
super.<成員方法名>

在Java語言中,用過繼承關係實現對成員的訪問是按照最近匹配原則進行的,規則如下:

(1)在子類中訪問成員變數和方法時將優先查詢是否在本類中已經定義,如果該成員在本類中存在,則使用本類的,否則,按照繼承層次的順序往父類查詢,如果未找到,繼續逐層向上到其祖先類查詢。

(2)super特指訪問父類的成員,使用super首先到直接父類查詢匹配成員,如果未找到,再逐層向上到祖先類查詢。

第二種:

子類可以通過super關鍵字呼叫父類中定義的構造方法,格式如下:

super(呼叫引數列表)

其中呼叫引數列表必須和父類的某個建構函式方法的引數列表完全匹配。

子類與其直接父類之間的構造方法存在約束關係,有以下幾條重要原則:

(1)按繼承關係,構造方法是從頂向下進行呼叫的。

(2)如果子類沒有構造方法,則它預設呼叫父類無參的構造方法,如果父類中沒有無引數的構造方法,則將產生錯誤。

(3)如果子類有構造方法,那麼建立子類的物件時,先執行父類的構造方法,再執行子類的構造方法。

(4)如果子類有構造方法,但子類的構造方法中沒有super關鍵字,則系統預設執行該構造方法時會產生super()程式碼,即該構造方法會呼叫父類無引數的構造方法。

(5)對於父類中包含有引數的構造方法,子類可以通過在自己的構造方法中使用super關鍵字來引用,而且必須是子類建構函式方法中的第一條語句。

(6)Java語言中規定當一個類中含有一個或多個有參構造方法,系統不提供預設的構造方法(即不含引數的構造方法),所以當父類中定義了多個有引數構造方法時,應考慮寫一個無引數的構造方法,以防子類省略super關鍵字時出現錯誤。