向上轉型 動態繫結 Java

2021-05-14 16:48:53 字數 1643 閱讀 3094

查了些網上的資料,發現如果子類向上轉型為父類,則會遺失掉父類中沒有定義的方法,而除了private的屬性外,其他的屬性都會被父類的屬性覆蓋。

《父類引用指向子類物件》

②: 顯式初始化;③:呼叫構造方法;④:物件的引用賦值給變數》

《子類物件在構建的時候,先構建了乙個父類物件(copy?)所有的成員變數和方法;

然後重寫成員變數和成員方法;只是覆蓋而不是delete;父類成員還在》

《子類引用子類中被隱藏的父類成員?強制轉換成父類,將視窗轉向父類內容》

例如如下程式中,son是乙個father型別的,指向son型別的物件的引用。所以,呼叫printtest時,列印的都是子類son的屬性(呼叫的son的printtest()方法)。

而當用system.out.println(son.var2)這樣的形式輸出時,除了son的私有屬性外,輸出的都是father類的屬性值。

而且當呼叫son.printtest2()時,則出現錯誤,無法編譯。

father son = new son();就是乙個向上轉型。一開始無法理解為什麼system.out.println(son.var2)輸出的是父類father的屬性值,son畢竟是指向乙個son型別的物件啊。下面是我後來的一種想法,比較通俗,如有謬誤,請高手指正:

當乙個兒子長大**娶妻生子之後,他便「向上轉型」為乙個父親了,呵呵,他除了非常私有的(private)一些情況保持不變外,如姓名,老婆的名 字等等外,其他的屬性(public,protected,friendly)都成為乙個標準的父親應有的屬性(被覆蓋了),如對家庭的責任感,由做兒子 時的「低」變為了父親應有的「高」;自由的程度,由作兒子時的「高」變為了作父親後的「低」等等類似的。而他作兒子時一些特有的(不屬於父親應有的或者說 父類沒有的)作為(方法)在其成為父親後便被捨棄了,如恣意妄為,夜不歸宿等等。而正常的行為,比如掙錢的方法,每個父親肯定不盡相同,作son時的方法 也就儲存了下來(覆蓋了父類的方法)。

father類

son類

testupcasting類

如果在testupcasting中沒有son.printtest2();這句,則程式編譯通過並執行,結果為

java繼承向上轉型和向下轉型和動態繫結

概念 把引用變數轉化為子類型別,則成為向下轉型。如果把引用變數轉化為父類型別,則成為向上轉型。public class base 父類靜態方法 static void staticmethod public class subextends base string subvar var only b...

Java向上向下轉型

向上轉型 b extends a,a a new b 就是向上轉型,此時a的型別為a,指向b,可以理解為把子類物件轉換成了父類物件,即父類的引用指向子類的物件,此時a不能呼叫子類自己新建的方法和變數,但若子類中重寫了父類的某個方法,那麼在呼叫這個方法時,將會呼叫子類的這個方法。向上轉型不存在風險 向...

Java 多型(向上轉型)

先來看一段 class baseclass public void test public class subclass extends baseclass public void sub public static void main string args 說明 當把乙個子類物件直接賦給父類的引...