亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將子類對象指定為超類對象時會發生什么情況

將子類對象指定為超類對象時會發生什么情況

HUX布斯 2022-09-14 16:02:44
所以我有一個關于超類A和子類B的問題,其中A有2個公共變量,B有1個以上的公共變量。我看到了這段代碼:A a = new A(); B b = new B(); a = b;最后一行有什么作用?我真的不明白當你在繼承關系中的2個類之間使用“=”時會發生什么。
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

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

讓我們明確以下幾點。

  1. 在 Java 中,當創建對象并且可以通過參考。引用對象。

  2. 一次一個引用只能引用一個對象

  3. 類型 X 的引用可以引用類型 X 的對象或任何子類型(在 X 是類的情況下進行擴展,如果 X 是接口,則實現)。

現在假設有兩個類,使得 .SuperSubSub extends Super

 SuperClass reference = new SubClass();

這是允許的,因為子類繼承自超類。上面我們有一個在堆中創建的子類類型的對象,它可以通過訪問。名為reference

請注意,類型的引用不能引用 的對象。讓我們簡要地看看為什么會這樣?如果允許對類型的引用引用類型的對象,那么它將被允許調用由定義的其他方法(函數),這將繼承所有方法,并且還定義了幾個附加方法)?,F在,這會使應用程序崩潰,因為 的對象 僅在 中定義了方法,但沒有 由 定義的任何其他方法。因此,編譯器在編譯時會阻止它。這是一個編譯時錯誤,使類型的引用引用類型的對象SubClassSuperClassSubClassSuperClassSubClassSubClassSuperClassSuperClassSuperClassSubClassSubClassSuperClass

現在讓我們看一下問題中提到的代碼

 SuperClass a = new SuperClass();
  SubClass b = new SubClass();
 a = b;

第 1 行:我們有一個超類的對象,由一個名為a

第2行:我們有一個子類的對象,由一個名為子類的變量引用b

第 3 行:我們有一個賦值,其中 被分配來引用 與 所指的對象相同的對象。因此,現在我們有兩個引用,都引用了在第 2 行創建的類型的對象。在第 1 行創建的 typer 對象(使用問題中提到的當前可用代碼)沒有任何引用,因此它符合垃圾回收的條件。abSubClassSuperClass


查看完整回答
反對 回復 2022-09-14
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

沒有任何“反應”。變量“b”引用的對象是單個對象。它同時是 B 的實例和 A 的實例。

當你執行賦值時,先前由變量'a'引用的對象變得不可訪問。對這一舊對象的考慮不參與這一討論。a = b

賦值后,“a”和“b”引用到同一對象。對象未更改。它仍然是 B 的實例和 A 的實例。

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


查看完整回答
反對 回復 2022-09-14
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號