第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么繼承在 Java 中以這種方式工作?

為什么繼承在 Java 中以這種方式工作?

精慕HU 2022-12-15 11:18:36
我是 Java 的新手,我試圖通過模擬以下程序來了解當(dāng)我將子類實(shí)例分配給父類實(shí)例變量時會發(fā)生什么。public class ConfusionWithInheritance {    public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        DerievedClass d = new DerievedClass();        BaseClass b = BaseClass.class.cast(d);        BaseClass b1 = new DerievedClass();        b.doSomeJob();        b.printMagic(); //-> Compiler shouted me that it didn't know this method here.    }}class BaseClass {    public void doSomeJob() {        System.out.println("Printing Value X");    }}class DerievedClass extends BaseClass {    public void doSomeJob() {        System.out.println("Printing Value Y");    }    public void printMagic() {        System.out.println("Printing magic...");    }}1) 為什么允許我將子類的實(shí)例分配給父類型變量?2)從這個答案中,解釋說因?yàn)槲腋嬖V類的藍(lán)圖是 - 父類 - 它只知道父類中的方法。那為什么在調(diào)用childInstance.doSomeJob()時打印子類方法中的值呢?
查看完整描述

2 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊

這歸結(jié)為編譯時間和運(yùn)行時間之間存在差異。

編譯時可用的方法是聲明對象的類型中的方法。
運(yùn)行時,調(diào)用的方法是實(shí)例化對象的類型中的方法。

因此,對于聲明為 BaseClass 類型并實(shí)例化為 DerivedClass 類型的對象,可用的方法將是 BaseClass 中的方法,即。doSomeJob(),但調(diào)用的方法是 DerivedClass 中的方法。


查看完整回答
反對 回復(fù) 2022-12-15
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個贊

創(chuàng)建對象時:

BaseClass b1 = new DerievedClass();

我們要說的是:

ReferenceType variableName = new ConcreteImplementation();

將其視為為新對象提供腳手架的 ReferenceType。

創(chuàng)建對象時,它會查看此 ReferenceType 并創(chuàng)建一個以 ReferenceType 中的所有方法作為骨架的對象。

然后我們看一下方法實(shí)現(xiàn)的ConcreteImplementation。所以編譯器尋找 ConcreteImplementation 來填充所有方法。

只有在 ReferenceType 中定義的內(nèi)容才會在最終對象中實(shí)現(xiàn)。

將轉(zhuǎn)換視為更改已存在對象的 ReferenceType

隨著線:

DerievedClass d = new DerievedClass();

ReferenceType 是 DerievedClass,所以我們從 DerivedClass 中獲取所有方法,并用 ConcreteImplementation 中的實(shí)現(xiàn)填充它們,即 DerivedClass。

然后我們將 DerievedClass d 轉(zhuǎn)換為 BaseClass b。

BaseClass b = BaseClass.class.cast(d);

d 具有 DerivedClass 的所有實(shí)現(xiàn),但腳手架來自 ReferencType BaseClass,因此我們無法調(diào)用 printMagic,因?yàn)樗淮嬖谟?BaseClass 中。

那有意義嗎?

希望能幫助到你


查看完整回答
反對 回復(fù) 2022-12-15
  • 2 回答
  • 0 關(guān)注
  • 83 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號