簡體   English   中英

將子類對象分配為超類對象時會發生什么

[英]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的實例。

也許您理解的障礙是對象和引用這些對象的變量之間的區別?

這是簡單的任務。 =是賦值運算符。

讓我們清除以下幾點。

  1. 在Java中,創建對象並可以通過它訪問時。 參考。 引用是指對象。
  2. 一次引用只能引用一個對象
  3. 類型X的引用可以引用類型X的對象或任何子類型(在X是類的情況下擴展,或者在X是接口的情況下實現)。

現在假設有SuperSub這兩個類,使得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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM