2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是一個(gè)簡(jiǎn)單的任務(wù)。 是賦值運(yùn)算符。=
讓我們明確以下幾點(diǎn)。
在 Java 中,當(dāng)創(chuàng)建對(duì)象并且可以通過參考。引用對(duì)象。
一次一個(gè)引用只能引用一個(gè)對(duì)象
類型 X 的引用可以引用類型 X 的對(duì)象或任何子類型(在 X 是類的情況下進(jìn)行擴(kuò)展,如果 X 是接口,則實(shí)現(xiàn))。
現(xiàn)在假設(shè)有兩個(gè)類,使得 .Super
Sub
Sub extends Super
SuperClass reference = new SubClass();
這是允許的,因?yàn)樽宇惱^承自超類。上面我們有一個(gè)在堆中創(chuàng)建的子類類型的對(duì)象,它可以通過訪問。名為reference
請(qǐng)注意,類型的引用不能引用 的對(duì)象。讓我們簡(jiǎn)要地看看為什么會(huì)這樣?如果允許對(duì)類型的引用引用類型的對(duì)象,那么它將被允許調(diào)用由定義的其他方法(函數(shù)),這將繼承所有方法,并且還定義了幾個(gè)附加方法)?,F(xiàn)在,這會(huì)使應(yīng)用程序崩潰,因?yàn)?的對(duì)象 僅在 中定義了方法,但沒有 由 定義的任何其他方法。因此,編譯器在編譯時(shí)會(huì)阻止它。這是一個(gè)編譯時(shí)錯(cuò)誤,使類型的引用引用類型的對(duì)象SubClass
SuperClass
SubClass
SuperClass
SubClass
SubClass
SuperClass
SuperClass
SuperClass
SubClass
SubClass
SuperClass
現(xiàn)在讓我們看一下問題中提到的代碼
SuperClass a = new SuperClass(); SubClass b = new SubClass(); a = b;
第 1 行:我們有一個(gè)超類的對(duì)象,由一個(gè)名為a
第2行:我們有一個(gè)子類的對(duì)象,由一個(gè)名為子類的變量引用b
第 3 行:我們有一個(gè)賦值,其中 被分配來引用 與 所指的對(duì)象相同的對(duì)象。因此,現(xiàn)在我們有兩個(gè)引用,都引用了在第 2 行創(chuàng)建的類型的對(duì)象。在第 1 行創(chuàng)建的 typer 對(duì)象(使用問題中提到的當(dāng)前可用代碼)沒有任何引用,因此它符合垃圾回收的條件。a
b
SubClass
SuperClass

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
沒有任何“反應(yīng)”。變量“b”引用的對(duì)象是單個(gè)對(duì)象。它同時(shí)是 B 的實(shí)例和 A 的實(shí)例。
當(dāng)你執(zhí)行賦值時(shí),先前由變量'a'引用的對(duì)象變得不可訪問。對(duì)這一舊對(duì)象的考慮不參與這一討論。a = b
賦值后,“a”和“b”引用到同一對(duì)象。對(duì)象未更改。它仍然是 B 的實(shí)例和 A 的實(shí)例。
也許您理解的障礙是對(duì)象和引用這些對(duì)象的變量之間的區(qū)別?
添加回答
舉報(bào)