千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 如何解決Java中的多重繼承問(wèn)題

如何解決Java中的多重繼承問(wèn)題

來(lái)源:千鋒教育
發(fā)布人:syq
時(shí)間: 2022-09-16 15:11:01 1663312261

  Java是當(dāng)今最流行的面向?qū)ο缶幊陶Z(yǔ)言之一。由于它是獨(dú)立于平臺(tái)的,因此您可以在每種類(lèi)型的設(shè)備和每個(gè)操作系統(tǒng)上找到 Java 應(yīng)用程序。而且由于Java相對(duì)容易學(xué)習(xí),因此它是許多程序員學(xué)習(xí)的第一批語(yǔ)言之一。

如何解決Java中的多重繼承問(wèn)題

  您應(yīng)該熟悉的 Java 的一個(gè)重要特性是類(lèi)繼承。繼承允許程序員通過(guò)促進(jìn)類(lèi)重用來(lái)優(yōu)化代碼。如果可以重用已經(jīng)過(guò)測(cè)試和調(diào)試的代碼,軟件開(kāi)發(fā)生命周期將變得更短且成本更低。

  雖然理論上是一個(gè)簡(jiǎn)單的概念,但編碼繼承關(guān)系需要注意細(xì)節(jié)。對(duì)于多重繼承尤其如此,其中單個(gè)子類(lèi)從多個(gè)父類(lèi)繼承屬性。

  Java拒絕多重繼承關(guān)系,因?yàn)樗鼈儠?huì)產(chǎn)生歧義,但是如果您知道該怎么做,有幾種方法可以實(shí)現(xiàn)許多相同的效果。

  在本文中,我們將研究多重繼承的問(wèn)題,并討論Java中的替代編碼選項(xiàng)。

  繼承術(shù)語(yǔ)

  有時(shí),要成為一名成功的程序員,你必須學(xué)會(huì)解決問(wèn)題,以便找到常見(jiàn)錯(cuò)誤或問(wèn)題的解決方法。這是安全智能編碼的必要部分。

  其中一個(gè)問(wèn)題涉及Java中的多重繼承(或者更確切地說(shuō),缺乏多重繼承)。

1

  要完全理解 Java 中的繼承,您需要熟悉基本的面向?qū)ο缶幊?(OOP) 繼承術(shù)語(yǔ)。

  類(lèi): 類(lèi)是面向?qū)ο缶幊陶Z(yǔ)言中的基本模板結(jié)構(gòu)。類(lèi)定義一組對(duì)象的公共屬性。

  父類(lèi):父類(lèi)也稱(chēng)為基類(lèi)或超類(lèi),是為子類(lèi)提供功能的可擴(kuò)展類(lèi)。這就是可重用性發(fā)揮作用的地方。創(chuàng)建子類(lèi)時(shí),將重用父類(lèi)定義和函數(shù)。

  兒童班:更一般地稱(chēng)為子類(lèi),子類(lèi)從另一個(gè)類(lèi)繼承特征。子類(lèi)是擴(kuò)展類(lèi)或派生類(lèi)。

  遺產(chǎn):父類(lèi)和子類(lèi)之間的關(guān)系。

  輸出讀取繼承類(lèi)型

  目前有許多流行的面向?qū)ο缶幊陶Z(yǔ)言在使用,包括 Java、C++、JavaScript、Python、PHP、Ruby 和 Perl。雖然繼承是這些 OOP 語(yǔ)言的常見(jiàn)概念,但并非所有繼承類(lèi)型都存在于每種語(yǔ)言中。

  了解您正在使用的特定語(yǔ)言中的一般繼承類(lèi)型和繼承限制至關(guān)重要。您對(duì)繼承的了解越多,您就越能有效地成為一名軟件開(kāi)發(fā)人員。

  Java 支持的繼承類(lèi)型包括:

  單級(jí)繼承:當(dāng)子類(lèi)從單個(gè)父類(lèi)派生功能時(shí)。

  多級(jí)繼承:這是單級(jí)繼承的分層形式。在多級(jí)繼承中,子類(lèi)還可以充當(dāng)其他子類(lèi)的父類(lèi)。每個(gè)級(jí)別之間的關(guān)系都是線性的 - 沒(méi)有分支像多重繼承那樣延伸到上面。然后,最終的子類(lèi)具有其上方每個(gè)級(jí)別的功能。

  分層繼承:與多重繼承相反。在分層繼承中,單個(gè)父類(lèi)具有多個(gè)子類(lèi)。因此,它不是在上面有分支,而是在下面分支。

  混合繼承:顧名思義,混合繼承是其他繼承類(lèi)型的組合。

  除了上面的繼承類(lèi)型之外,Java 還支持其他類(lèi)型。

  多重繼承:在多重繼承中,一個(gè)子類(lèi)具有多個(gè)父類(lèi)。雖然 Java 和 JavaScript 不支持多重繼承,但 OOP 語(yǔ)言(如C++支持多重繼承)

  多路徑繼承:多級(jí)、多級(jí)和分層繼承的混合體,在多路徑繼承中,子類(lèi)從父類(lèi)和父類(lèi)的多個(gè)子類(lèi)派生其特性和功能。因?yàn)槎嗦窂嚼^承依賴(lài)于多重繼承,所以 Java 不支持它的使用。

  為什么 Java 不支持多重繼承

  多重繼承的主要問(wèn)題是,它有可能在子類(lèi)中產(chǎn)生歧義。在1995年的概述白皮書(shū)中,Java首席設(shè)計(jì)師詹姆斯·高斯林(James Gosling)指出,多重繼承的問(wèn)題是創(chuàng)建Java的動(dòng)機(jī)之一。

  多重繼承所固有的困難在鉆石問(wèn)題中表現(xiàn)得最為明顯。在菱形問(wèn)題中,父類(lèi) A 有兩個(gè)不同的子類(lèi) B 和 C;也就是說(shuō),子類(lèi) B 和 C 擴(kuò)展了類(lèi) A。

2

  現(xiàn)在我們創(chuàng)建一個(gè)新的子類(lèi) D,它同時(shí)擴(kuò)展了類(lèi) B 和類(lèi) C.請(qǐng)注意,我們有多重繼承(D 擴(kuò)展 B 和 C)、分層繼承(B 和 C 擴(kuò)展 A)和多級(jí)繼承(D 擴(kuò)展 A、B 和 C)。

  在菱形問(wèn)題中,子類(lèi) B 和 C 從父類(lèi) A 繼承方法。B 和 C 都重寫(xiě)繼承的方法。但是B和C中的新方法相互沖突。

  終極子類(lèi) D 從其多個(gè)父級(jí) B 和 C 繼承兩個(gè)獨(dú)立且沖突的方法。不清楚應(yīng)該使用哪種方法類(lèi)D,因此存在歧義。其他 OOP 編程語(yǔ)言實(shí)現(xiàn)了各種方法來(lái)解決多重繼承歧義。

  如何解決Java中的多重繼承問(wèn)題

  僅僅因?yàn)槎嘀乩^承有問(wèn)題并不意味著它沒(méi)有用。在許多情況下,您可能希望一個(gè)類(lèi)具有來(lái)自其他多個(gè)類(lèi)的功能。

  想想當(dāng)你成為一個(gè)非常成功的軟件開(kāi)發(fā)人員時(shí),你會(huì)買(mǎi)到特斯拉跑車(chē)。它將從跑車(chē)類(lèi)和電動(dòng)汽車(chē)類(lèi)中汲取特征。

  或者,也許您正在使用私有瀏覽器閱讀本文,該文章具有在線數(shù)據(jù)隱私解決方案類(lèi)和常規(guī) Internet 瀏覽器類(lèi)的功能。

  但是你不能在Java中擴(kuò)展多個(gè)類(lèi)。那么Java如何處理多重繼承問(wèn)題呢?

  好吧,它使用稱(chēng)為接口的結(jié)構(gòu)。接口是抽象類(lèi)型,用于指定要實(shí)現(xiàn)的類(lèi)的行為。由于它們是抽象的,因此接口不包含有關(guān)其行為的詳細(xì)說(shuō)明。相反,這些類(lèi)提供了接口行為的具體實(shí)現(xiàn)。

  接口具有以下幾個(gè)定義特征:

  與類(lèi)不同,您不實(shí)例化接口。相反,類(lèi)實(shí)現(xiàn)接口

  接口僅包含公共常量定義和方法標(biāo)頭

  接口只能擴(kuò)展其他接口,而不能擴(kuò)展類(lèi)

  接口可以擴(kuò)展多個(gè)接口,類(lèi)可以實(shí)現(xiàn)多個(gè)接口

  現(xiàn)在,我們可以有效地繞過(guò)接口的菱形問(wèn)題?;叵胍幌?,只有接口只能擴(kuò)展其他接口,并且任何需要多個(gè)繼承特征的類(lèi)都必須實(shí)現(xiàn)多個(gè)接口,我們可以重新定義菱形問(wèn)題類(lèi)。

  以前的類(lèi) A、B 和 C 現(xiàn)在變成了接口 A、B 和 C.接口 B 和 C 仍然擴(kuò)展了接口 A,但這些接口中沒(méi)有具體的函數(shù),只有定義的行為。類(lèi) D 仍然是一個(gè)類(lèi),它負(fù)責(zé)接口 B 和 C 中的行為的具體實(shí)現(xiàn)。

  請(qǐng)注意此處的一個(gè)關(guān)鍵區(qū)別:D 類(lèi)不是擴(kuò)展接口 B 和 C。相反,它正在實(shí)施它們。因此,您實(shí)際上沒(méi)有多重繼承。相反,你只是重新定義了問(wèn)題。

  了解繼承對(duì)于任何有效的編碼人員都是必要的。對(duì)于 Java 程序員來(lái)說(shuō),了解繼承的局限性以及針對(duì)傳統(tǒng)多重繼承問(wèn)題的內(nèi)置 Java 解決方法同樣重要。

  學(xué)習(xí)如何在Java中放置接口以重新創(chuàng)建多重繼承的效果將提高您的效率和可雇用性。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
抖店入駐收費(fèi)多少?開(kāi)抖店費(fèi)用是多少?

如果要開(kāi)通抖音小店,需要先把抖音賬號(hào)開(kāi)通商品櫥窗功能。入駐之后,可以選擇頭條賬號(hào)、抖音賬號(hào)、火山賬號(hào)任一類(lèi)型注冊(cè)或登錄。那開(kāi)個(gè)抖店要多...詳情>>

2023-09-19 07:50:26
想做直播帶貨的貨源哪里來(lái)?怎么找貨源?

現(xiàn)如今直播推廣的方式是非?;鸬?,有著非常多的賣(mài)家都是利用直播推廣店鋪產(chǎn)品,效果也是非常不錯(cuò)。但很多賣(mài)家想要了解現(xiàn)在直播帶貨的話(huà)什么產(chǎn)品...詳情>>

2023-09-19 07:47:16
適合三農(nóng)領(lǐng)域的名字?有何技巧?

現(xiàn)在在抖音上很多博主會(huì)選擇直播來(lái)賺取更多的流量以及利潤(rùn),直播間的東西也有很多讓消費(fèi)者信任并且喜歡的,而且隨著越來(lái)越多人直播,很多農(nóng)產(chǎn)品...詳情>>

2023-09-19 07:06:05
抖店商品發(fā)布違規(guī)怎么申訴?有何規(guī)則?

抖店服務(wù)市場(chǎng)服務(wù)商發(fā)布違禁信息如何處理?情節(jié)嚴(yán)重程度判定原則:違規(guī)嚴(yán)重等級(jí)主要通過(guò)服務(wù)商違規(guī)次數(shù)、造成后果的嚴(yán)重程度、獲利或?qū)е聯(lián)p失的...詳情>>

2023-09-19 06:59:55
“泛垂直起號(hào)”可能是2023年最高效的起號(hào)方式

這可能是明年最好用的旗號(hào)方式了,今天教大家一個(gè)很野,但是可以讓你三天漲1000粉的偏方。去年前年啊,每個(gè)人都教你,誰(shuí)知七號(hào)對(duì)著自己的產(chǎn)品拍...詳情>>

2023-09-19 06:37:38
開(kāi)班信息
北京校區(qū)
  • 北京校區(qū)
  • 大連校區(qū)
  • 廣州校區(qū)
  • 成都校區(qū)
  • 杭州校區(qū)
  • 長(zhǎng)沙校區(qū)
  • 合肥校區(qū)
  • 南京校區(qū)
  • 上海校區(qū)
  • 深圳校區(qū)
  • 武漢校區(qū)
  • 鄭州校區(qū)
  • 西安校區(qū)
  • 青島校區(qū)
  • 重慶校區(qū)
  • 太原校區(qū)
  • 沈陽(yáng)校區(qū)
  • 南昌校區(qū)
  • 哈爾濱校區(qū)