關於類別的繼承
Java 可以根據既有的「 Car 類別」為基礎,輕易的就 產生另一個可以用來表示賽車的「 RacingCar 類別」
,像這樣以既有的類別為基礎,衍生出另一個類別的 現象,稱為:
類別的延伸 (extends)
換句話說,新的類別可以從舊類別繼承而來,包括舊
類別的性質和功能( 2 者統稱為成員)也會一併繼承
到新類別當中。
類別的延伸
在宣告子類別的時候,必須在程式中使用 extends 這 個關鍵字,後面再加上父類別的名稱。只要宣告的方 式正確,可以從父類別 Car 衍生出子類別 RacingCar
。
延伸父類別之後,就可以宣告子類別。
而子類別會繼承父類別的成員。
class 子類別名稱 extends 父類別名稱 {
子類別新增的成員…
子類別的建構元 ( 參數… ) {
… } }
類別的延伸
產生子類別的物件
class Sample1 {
public static void main(String args[]) {
RacingCar rccar1;
rccar1 = new RacingCar();
rccar1.setCar(1234, 20.5);
rccar1.setCourse(5);
} }
產生子類別的物件
呼叫子類別新增的 method
呼叫繼承而來的 metho d
父類別延伸之後可以設計新的子類別。
呼叫父類別的建構元
如果您沒有任何的指定,產生子類別的物件時,會在 子類別建構元的開頭,先呼叫父類別中沒有引數的建 構元並加以執行。
父類別的建構元其實並沒有繼承給子類別,不過子類 別仍然會自動呼叫父類別的建構元,為的就是要幫助 子類別對繼承自父類別的成員進行初始值的設定工作
。
使用 super()
如果您想要從子類別的建構元,呼叫父類別當中特定
的建構元,必須使用 super() 關鍵字。
從子類別存取其他類別的成員資料
所謂的成員 (member) ,指的是一個類別 (class) 內 部的 field 和 method 。
如果父類別裏面的成員原本就是私有成員,則子類別 將無法存取到這些私有類別的資料。
私有成員
私有成員不能被同一類別以外的其他程式存取,因
此如果父類別裏面的成員原本就是私有成員,則子
類別將無法存取到這些私有類別的資料。
保護成員
父類別內部的成員一旦設定為「 protected 」,其 性質和 private member 有所不同,也就是說:子 類別可以存取父類別內部
protected member 的資料
從子類別存取其他類別的 成員資料
overriding method
在子類別中定義一個和父類別的 method 名稱、參數數
目、資料型態完全相同的 method ,用來取代父類別當
中原本的 method 功能,稱為改寫 (overriding) 。
瞭解改寫 (overriding) 的重要性
在一個稍為大型的程式中一定會產生各式各樣的物件
,因此對各種類別所產生的物件加以管理是必然的事
,於是有人就想到利用下列這種「父類別的陣列」來
儲存各種類別所產生的物件。
指定 final
當您在設計類別的時候,其中可能有一些父類別的 met
hod 您根本不想讓它在子類別中產生被改寫 (overridi
ng) 的現象。如果有這種需求時,您必須在父類別的 m
ethod 的第 1 行加上 final ,就會禁止被改寫現象繼續
產生。
建立類別的階層
對 Java 來說,一個父類 別可以延伸出數個子類 別,這時候整個類別家 族的結構如右圖所示:
子類別再繼續往下
延伸,可以再產生
新的子類別。
關於 Object 類別
如果該類別當時沒有指定任何父類別,則「 Java 會 自動設定讓該類別繼承 java.lang.Object 這個類別 做為父類別」。
class Car {
...
}
什麼都沒有指定時,就會以Object 類別做為 父類別,自己則變成子類別