[英]What happens when a subclass object is passed to a method with a superclass parameter?
[英]What happens when a subclass object is assigned as a superclass object
所以我有一個關於超類A和子類B的問題,其中A有2個公共變量,而B還有1個。
我看到了以下代碼片段:
A a = new A();
B b = new B();
a = b;
最后那行是做什么的? 我不真正理解在繼承關系的兩個類之間使用“ =”時實際發生的情況。
什么都沒發生'。 變量“ b”引用的對象是單個對象。 同時是B的實例和A的實例。
當執行賦值a = b
,以前由變量“ a”引用的對象將變得不可訪問。 對該舊對象的考慮不在此討論之列。
分配后,“ a”和“ b”代表相同的對象。 對象不變。 它仍然是B的實例和A的實例。
也許您理解的障礙是對象和引用這些對象的變量之間的區別?
這是簡單的任務。 =
是賦值運算符。
讓我們清除以下幾點。
現在假設有Super
和Sub
這兩個類,使得Sub extends Super
。
SuperClass reference = new SubClass();
這是允許的,因為SubClass繼承自SuperClass。 在上方,我們在堆中創建了一個SubClass類型的對象,可以通過訪問該對象。 參考命名reference
請注意,類型SubClass
的引用不能引用SuperClass
對象。 讓我們簡單地看看為什么會這樣嗎。 如果允許SubClass
類型的引用引用SuperClass
類型的Object,則它將被允許調用SubClass
定義的其他方法(函數)( SubClass
將繼承SuperClass
所有方法,並且還將定義一些其他方法)。 現在這將使應用程序崩潰,因為SuperClass
的對象僅具有SuperClass
定義的方法,而沒有SubClass
定義的任何其他方法。 因此,編譯器會在編譯時阻止它。 具有SubClass
類型的引用引用SuperClass
類型的對象的編譯時錯誤
現在讓我們看問題中提到的代碼
SuperClass a = new SuperClass();
SubClass b = new SubClass();
a = b;
第1行:我們有一個SuperClass對象,該對象由名為a
SuperClass類型的變量引用
第2行:我們有一個SubClass對象,該對象由名為b
SubClass類型的變量引用
第3行:我們有一個分配,其中a
被分配為引用b
引用的相同對象。 因此,現在我們兩個引用都引用了在第2行創建的SubClass
類型的對象。在第1行創建的類型為SuperClass
對象(帶有問題中提到的當前可用代碼)沒有任何引用,因此可以進行垃圾回收。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.