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

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

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

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

精慕HU 2022-12-15 11:18:36
我是 Java 的新手,我試圖通過模擬以下程序來了解當我將子類實例分配給父類實例變量時會發生什么。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) 為什么允許我將子類的實例分配給父類型變量?2)從這個答案中,解釋說因為我告訴類的藍圖是 - 父類 - 它只知道父類中的方法。那為什么在調用childInstance.doSomeJob()時打印子類方法中的值呢?
查看完整描述

2 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

這歸結為編譯時間和運行時間之間存在差異。

編譯時,可用的方法是聲明對象的類型中的方法。
運行時,調用的方法是實例化對象的類型中的方法。

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


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

TA貢獻1833條經驗 獲得超4個贊

創建對象時:

BaseClass b1 = new DerievedClass();

我們要說的是:

ReferenceType variableName = new ConcreteImplementation();

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

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

然后我們看一下方法實現的ConcreteImplementation。所以編譯器尋找 ConcreteImplementation 來填充所有方法。

只有在 ReferenceType 中定義的內容才會在最終對象中實現。

將轉換視為更改已存在對象的 ReferenceType

隨著線:

DerievedClass d = new DerievedClass();

ReferenceType 是 DerievedClass,所以我們從 DerivedClass 中獲取所有方法,并用 ConcreteImplementation 中的實現填充它們,即 DerivedClass。

然后我們將 DerievedClass d 轉換為 BaseClass b。

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

d 具有 DerivedClass 的所有實現,但腳手架來自 ReferencType BaseClass,因此我們無法調用 printMagic,因為它不存在于 BaseClass 中。

那有意義嗎?

希望能幫助到你


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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