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

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

是否可以在超類對象上調(diào)用子類的方法?

是否可以在超類對象上調(diào)用子類的方法?

九州編程 2019-11-02 13:34:06
動物是狗的超類,而狗有一種叫樹皮的方法public void bark(){    System.out.println("woof");}考慮以下:Animal a = new Dog();if (a instanceof Dog){    a.bark();}會發(fā)生什么?不允許分配允許調(diào)用樹皮,并在運行時打印“ woof”可以叫到樹皮,但不打印任何內(nèi)容調(diào)用樹皮會導致編譯時錯誤調(diào)用樹皮會導致運行時錯誤我說2是因為我們正在檢查物體是否是狗;因為dog是其中包含bark方法的類,如果是,則將其調(diào)用,它將打印出:s我的理解在這里正確嗎?
查看完整描述

3 回答

?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

由于Animal沒有稱為bark的方法,因此無法編譯。這樣想,所有的狗都是動物,但并非所有的動物都是狗。所有的狗都吠叫,但不是所有的動物都吠叫。


查看完整回答
反對 回復 2019-11-02
?
守著一只汪

TA貢獻1872條經(jīng)驗 獲得超4個贊

不,答案是;


4)調(diào)用樹皮會導致編譯時錯誤


樹皮方法未定義為分配的動物類型的方法,因此將導致編譯時問題;這可以通過鑄造來解決;


((Dog)a).bark();


查看完整回答
反對 回復 2019-11-02
?
慕哥6287543

TA貢獻1831條經(jīng)驗 獲得超10個贊

密鑰在以下行中:


Animal a = new Dog();

盡管Dog創(chuàng)建了一個新實例,但其引用a被聲明為類型Animal。因此,所有對的引用a都將new Dog作為處理Animal。


因此,除非Animal具有bark方法,否則以下行將導致編譯器錯誤:


a.bark();

即使a經(jīng)過測試是否是它的實例Dog并a instanceof Dog實際返回true,該變量a仍然是類型的Animal,因此if語句內(nèi)的塊仍然a作為變量處理Animal。


這是靜態(tài)類型語言的功能,在這種類型中,變量會提前分配類型,然后在編譯時檢查類型是否匹配。如果此代碼是在動態(tài)類型的語言(在運行時檢查類型)上執(zhí)行的,則可以允許以下內(nèi)容:


var a = new Dog();

if (a instanceof Dog)

    a.bark();

a.bark()只能在實例為時執(zhí)行Dog,因此對的調(diào)用bark將始終有效。但是,Java是一種靜態(tài)類型的語言,因此不允許這種類型的代碼。


查看完整回答
反對 回復 2019-11-02
  • 3 回答
  • 0 關(guān)注
  • 559 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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