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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java接口如何模擬多重繼承?

Java接口如何模擬多重繼承?

有只小跳蛙 2019-12-10 13:08:13
我正在閱讀“ Java教程”(第2次)。我剛讀完有關(guān)接口的部分,但仍然不了解Java接口如何模擬多重繼承。有比書中更清楚的解釋嗎?
查看完整描述

3 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

假設(shè)您的域中有兩種東西:卡車和廚房


卡車具有driveTo()方法,而Kitchens具有cook()方法。


現(xiàn)在,假設(shè)Pauli決定從送貨卡車的后面出售比薩餅。他想要一種可以與drive()和cook()一起使用的東西。


在C ++中,他將使用多重繼承來做到這一點(diǎn)。


在Java中,這被認(rèn)為太危險(xiǎn)了,因此您可以從主類繼承,但是可以從接口“繼承”行為,這些行為對(duì)于所有意圖和目的都是抽象類,沒有字段或方法實(shí)現(xiàn)。


因此,在Java中,我們傾向于使用委托來實(shí)現(xiàn)多重繼承:


Pauli對(duì)卡車進(jìn)行了子類化,并在一個(gè)名為廚房的成員變量中為卡車添加了廚房。他通過調(diào)用kitchen.cook()實(shí)現(xiàn)了Kitchen接口。


class PizzaTruck extends Truck implements Kitchen {

   Kitchen kitchen;


   public void cook(Food foodItem) {

      kitchen.cook(foodItem);

   }

}

他是一個(gè)快樂的人,因?yàn)樗F(xiàn)在可以做類似的事情;


pizzaTruck.driveTo(beach);

pizzaTruck.cook(pizzaWithExtraAnchovies);

好的,這個(gè)愚蠢的故事是要說明它不是多重繼承的模擬,它是真正的多重繼承,但前提是您只能繼承協(xié)定,只能從稱為接口的空抽象基類繼承。




查看完整回答
反對(duì) 回復(fù) 2019-12-11
?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊

您可能會(huì)感到困惑,因?yàn)槟诒镜夭榭炊鄠€(gè)繼承,就一個(gè)類而言,該類從多個(gè)父級(jí)繼承了實(shí)現(xiàn)細(xì)節(jié)。在Java中這是不可能的(并且在可能的情況下經(jīng)常導(dǎo)致語言濫用)。

接口允許類型的多重繼承,例如a class Waterfowl extends Bird implements Swimmer可以被其他類當(dāng)作a Bird 如同a使用Swimmer。這是多重繼承的更深層含義:允許一個(gè)對(duì)象像它一次一樣屬于多個(gè)不相關(guān)的不同類。


查看完整回答
反對(duì) 回復(fù) 2019-12-11
?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是一種通過Java接口實(shí)現(xiàn)多重繼承的方法。


要實(shí)現(xiàn)什么?

類A擴(kuò)展了B,C // //在Java中這不可能直接實(shí)現(xiàn),但是可以間接實(shí)現(xiàn)。


class B{

   public void getValueB(){}

}


class C{

   public void getValueC(){}

}



interface cInterface{

   public getValueC();

}


class cChild extends C implemets cInterface{

    public getValueC(){


      // implementation goes here, call the super class's getValueC();


    }

}



// Below code is **like** class A extends B, C 

class A extends B implements cInterface{

   cInterface child =  new cChild();

   child.getValueC();

}



查看完整回答
反對(duì) 回復(fù) 2019-12-11
  • 3 回答
  • 0 關(guān)注
  • 238 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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