java繼承和實(shí)現(xiàn)的區(qū)別 JAVA中繼承與組合的區(qū)別是什么?
JAVA中繼承與組合的區(qū)別是什么?1. 組合(has-a)關(guān)系可以顯式地獲得包含類(lèi)的對(duì)象(在繼承中稱(chēng)為父類(lèi)),而繼承(is-a)是隱式地獲得父類(lèi)的對(duì)象。包含的類(lèi)對(duì)應(yīng)于父類(lèi),而組合的外部類(lèi)對(duì)應(yīng)于子類(lèi)。2
JAVA中繼承與組合的區(qū)別是什么?
1. 組合(has-a)關(guān)系可以顯式地獲得包含類(lèi)的對(duì)象(在繼承中稱(chēng)為父類(lèi)),而繼承(is-a)是隱式地獲得父類(lèi)的對(duì)象。包含的類(lèi)對(duì)應(yīng)于父類(lèi),而組合的外部類(lèi)對(duì)應(yīng)于子類(lèi)。
2. 組合關(guān)系在運(yùn)行時(shí)決定,繼承關(guān)系在編譯時(shí)決定。
3. 復(fù)合是復(fù)合類(lèi)和包含類(lèi)之間的松耦合關(guān)系,繼承是父類(lèi)和子類(lèi)之間的緊耦合關(guān)系。
4. 選擇使用組合關(guān)系時(shí),外部類(lèi)的對(duì)象包含在組合類(lèi)中,組合類(lèi)可以調(diào)用外部類(lèi)的必要方法。使用繼承關(guān)系時(shí),父類(lèi)的所有方法和變量都被子類(lèi)無(wú)條件繼承,不能選擇子類(lèi)。
5. 最重要的一點(diǎn)是,當(dāng)使用繼承關(guān)系時(shí),可以實(shí)現(xiàn)類(lèi)型回溯,即使用父類(lèi)變量引用子類(lèi)對(duì)象。通過(guò)這種方式,多態(tài)性可以實(shí)現(xiàn),但是組合不具有這種特性。
6. 同樣需要注意的是,如果您決定重用另一個(gè)類(lèi)的方法永遠(yuǎn)不需要更改,那么您應(yīng)該使用composition,因?yàn)閏omposition只是重用包含的類(lèi)的接口,繼承甚至可以重寫(xiě)這些接口,除了重用父類(lèi)的接口之外,還可以修改父類(lèi)接口的默認(rèn)實(shí)現(xiàn)。構(gòu)圖不具備這一特點(diǎn)。
7. 從邏輯上講,這種結(jié)合主要體現(xiàn)了整體和局部的思想。例如,computer類(lèi)由memory類(lèi)、CPU類(lèi)、hard disk類(lèi)等組成,繼承反映了一種可追溯的父子關(guān)系,子類(lèi)也是父類(lèi)的對(duì)象。
8. 二者的區(qū)別主要體現(xiàn)在類(lèi)的抽象階段。在分析類(lèi)之間的關(guān)系時(shí),我們應(yīng)該決定是使用組合還是繼承。
9. 引用網(wǎng)友的一句經(jīng)典名言,我們應(yīng)該能夠分清繼承和結(jié)合的區(qū)別:結(jié)合可以說(shuō)是“我雇了一位老人在家工作”,而繼承是“我父親幫我在家工作”。
Java中類(lèi)的組合和繼承請(qǐng)?jiān)敿?xì)敘述這兩種方法?
復(fù)合類(lèi)表示公共類(lèi)a{}公共類(lèi)B{私有a a//以a為元變量}繼承表示:公共類(lèi)a{公共void ddd(){}}公共類(lèi)B擴(kuò)展a{//它可以傳遞超級(jí)ddd()獲取父a的方法}
Java和JavaScript在編程上非常相似。有一些人不知道Java和JavaScript之間的區(qū)別。雖然兩者都有“Java”這個(gè)詞,但Java和JavaScript是完全不同的東西。
許多人錯(cuò)誤地將JavaScript視為Java的一個(gè)子集。事實(shí)上,JavaScript不是Java的子集,與Java無(wú)關(guān)。
1. 不同的開(kāi)發(fā)者
java是由sun開(kāi)發(fā)的,而JavaScript是由Netscape開(kāi)發(fā)的。
2. Java是一種面向?qū)ο蟮慕忉屝跃幊陶Z(yǔ)言,JavaScript是一種解釋性腳本編程語(yǔ)言。它們?cè)诰幊桃?guī)范和語(yǔ)法上是不同的。
JavaScript是動(dòng)態(tài)類(lèi)型語(yǔ)言,Java是靜態(tài)類(lèi)型語(yǔ)言
JavaScript是弱類(lèi)型語(yǔ)言,Java是強(qiáng)類(lèi)型語(yǔ)言
JavaScript是基于原型的面向?qū)ο笳Z(yǔ)言,Java是基于類(lèi)的面向?qū)ο笳Z(yǔ)言
3。不同的應(yīng)用范圍
javascript主要用于前端交互和表單驗(yàn)證,主要用于瀏覽器端,Java主要用于后端系統(tǒng)開(kāi)發(fā)。
由于網(wǎng)景公司與Sun公司合作開(kāi)發(fā)JavaScript,當(dāng)時(shí)Sun公司的Java口碑很高,所以網(wǎng)景公司將這種語(yǔ)言命名為JavaScript,有利于推廣。另外,JavaScript在設(shè)計(jì)之初也提到了Java。
Java和js有什么區(qū)別?
1. Java只支持單一繼承,但可以實(shí)現(xiàn)多個(gè)接口。如果未顯示繼承任何類(lèi),系統(tǒng)將默認(rèn)繼承對(duì)象類(lèi)。但是,如果a顯示繼承B,則系統(tǒng)不會(huì)給出默認(rèn)的繼承對(duì)象,而是a將繼承B,B將繼承object,這相當(dāng)于間接地繼承對(duì)象。
2. 談到繼承,您會(huì)想到面向?qū)ο蟮囊粋€(gè)原則:優(yōu)先考慮組合而不是繼承。為什么?
首先,繼承和組合都可以達(dá)到代碼重用的效果。我認(rèn)為有以下考慮:
1。繼承的父類(lèi)繼承父類(lèi)的成員以增加耦合度
2。如果父類(lèi)發(fā)生變化,會(huì)影響子類(lèi),組合只需要保證接口的穩(wěn)定性
3。子類(lèi)在編譯時(shí)繼承父類(lèi),不能動(dòng)態(tài)更改,但組合可以根據(jù)需要使用不同的實(shí)現(xiàn)類(lèi)。
因此,組合更加靈活和可擴(kuò)展。
但是,如果您需要向上移動(dòng),或者明確說(shuō)明類(lèi)關(guān)系是is-a關(guān)系,則仍然需要使用繼承。
希望對(duì)您有所幫助,可以跟著我,繼續(xù)分享java知識(shí),謝謝。