Java 是一種強型別語言。
標準轉換和自動升級適用於原始型別。
嚴格執行型別相容性。
通常,一個類別的引用變數不能引用另一個類別的物件。
即使類別 X 和 Y 在結構上相同,也不可能將 X 的引用分配給 Y 的對象,因為類型不同。
一般來說,物件引用變數只能引用其類型的物件。
型別強加的例外是超類別的引用變數可以引用從該超類別派生的任何子類別的物件。
由於 Y 源自 X,因此允許 x2 接收 Y 物件的引用。
引用變數的類型,而不是它引用的物件的類型,決定了可以存取的成員。
當子類別物件的引用被賦值給超類別變數時,只能存取超類別定義的成員。
在範例中,x2 無法存取 Y 的成員 b,因為類別 X 不知道子類別新增的成員。
分配給超類別變數的子類別參考很常見,尤其是在類別層次結構中呼叫建構子時。
子類別可以受益於將超類別中的物件作為參數的建構函數,從而允許創建物件的副本。
在此程序中,t2 由 t1 構造而成,因此是相同的。
此三角形產生器的注意事項:
// 從另一個物件建構一個物件。
三角形(三角形ob) {
超級(ob); // 將物件傳遞給 TwoDShape
的建構子
樣式 = ob.style;
}
它接收一個 Triangle 類型的物件並將其(透過 super)傳遞給此 TwoDShape 建構子:
//從另一個物件建構一個物件。
TwoDShape(TwoDShape ob) {
寬度 = ob.width;
高度 = ob.height;
}
TwoDShape() 建構子期望接收 TwoDShape 類型的物件。
Triangle() 子類別的建構子向其傳遞一個 Triangle 類型的物件。
這是有效的,因為來自超類別(如 TwoDShape)的引用可以引用來自子類別(如 Triangle)的物件。
將衍生類別的物件的參考傳遞給超類別的建構子是可以接受的。
超類別建構子 TwoDShape() 僅初始化屬於 TwoDShape 類別的成員,不考慮 Triangle 子類別的其他成員。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3