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

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

Java多重繼承

Java多重繼承

慕的地6264312 2019-07-15 14:55:25
Java多重繼承為了充分理解如何解決Java的多重繼承問題,我有一個(gè)需要澄清的經(jīng)典問題。讓我說我有課Animal它有子類Bird和Horse我需要上一堂課Pegasus從Bird和Horse自Pegasus是一只鳥和一匹馬。我認(rèn)為這是典型的鉆石問題。據(jù)我所知,解決這個(gè)問題的經(jīng)典方法是Animal, Bird和Horse類接口和實(shí)現(xiàn)Pegasus從他們那里。我想知道是否有另外一種方法可以解決我仍然可以為鳥類和馬匹創(chuàng)造物體的問題。如果有一種方法也能創(chuàng)造動(dòng)物,那將是偉大的,但不是必要的。
查看完整描述

2 回答

?
守候你守候我

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

將對(duì)象組合在一起有兩種基本方法:

  • 第一個(gè)是

    繼承

    ..正如您已經(jīng)確定的那樣,繼承的局限性意味著您不能在這里做您需要的事情。
  • 二是

    構(gòu)圖

    ..由于繼承失敗,您需要使用組合。

它的工作方式是你有一個(gè)動(dòng)物物體。然后在該對(duì)象中添加進(jìn)一步的對(duì)象,這些對(duì)象提供所需的屬性和行為。

例如:

  • 延展

    動(dòng)物

    實(shí)施器

    IFIER

  • 延展

    動(dòng)物

    實(shí)施器

    伊赫比沃爾

  • 飛馬

    延展

    動(dòng)物

    實(shí)施器

    Iherbivore,IQuadrued,IFlier

現(xiàn)在IFlier就像這樣:

 interface IFlier {
     Flier getFlier();
 }

所以Bird看起來是這樣的:

 class Bird extends Animal implements IFlier {
      Flier flier = new Flier();
      public Flier getFlier() { return flier; }
 }

現(xiàn)在,您擁有了繼承的所有優(yōu)點(diǎn)。你可以重復(fù)使用代碼。您可以擁有一組IFliers,并且可以使用多態(tài)性的所有其他優(yōu)點(diǎn),等等。

然而,你也有所有的靈活性,從組成。您可以根據(jù)自己的喜好將不同的接口和復(fù)合支持類應(yīng)用于每種類型的Animal-盡可能多地控制每一個(gè)位是如何設(shè)置的。

組合的策略模式替代方法

取決于您所做的內(nèi)容和方式的另一種方法是將Animal基類包含一個(gè)內(nèi)部集合,以保留不同行為的列表。在這種情況下,您最終會(huì)使用更接近策略模式的東西。這確實(shí)在簡化代碼方面具有優(yōu)勢(例如Horse不需要知道任何關(guān)于QuadrupedHerbivore)但如果不采用接口方法,則會(huì)失去多態(tài)的許多優(yōu)點(diǎn),等等。


查看完整回答
反對(duì) 回復(fù) 2019-07-15
  • 2 回答
  • 0 關(guān)注
  • 404 瀏覽

添加回答

舉報(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)