python編程 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和PYTHON哪個(gè)更難?不是計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生適合學(xué)哪個(gè)?
感謝您的邀請(qǐng)
!從編程語(yǔ)言本身的復(fù)雜性來(lái)看,Java比python更復(fù)雜,但python也可以編寫(xiě)非常復(fù)雜的程序。
Java語(yǔ)言是一種純面向?qū)ο缶幊陶Z(yǔ)言,具有嚴(yán)格的語(yǔ)法要求。同時(shí),Java是一種典型的靜態(tài)語(yǔ)言,也就是說(shuō),Java不允許未定義的賦值。因此,java代碼有更多的模式(儀式)內(nèi)容,包括一些復(fù)雜的定義過(guò)程。另外,Java對(duì)抽象有很高的要求。學(xué)習(xí)Java實(shí)際上就是學(xué)習(xí)Java如何完成抽象。
Python編程語(yǔ)言是腳本語(yǔ)言和面向?qū)ο笳Z(yǔ)言的結(jié)合。Python不僅具有腳本語(yǔ)言的簡(jiǎn)單性,而且具有面向?qū)ο笳Z(yǔ)言的靈活性,因此受到了廣大程序員的歡迎。比如廣為流傳的“人生苦短,我用蟒蛇”就是一個(gè)比較生動(dòng)的比喻。
對(duì)于非計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生來(lái)說(shuō),由于Python語(yǔ)言易學(xué),而且Python開(kāi)發(fā)環(huán)境相對(duì)容易搭建,所以學(xué)習(xí)Python是一個(gè)不錯(cuò)的選擇。
Python有很多應(yīng)用領(lǐng)域,如web開(kāi)發(fā)、大數(shù)據(jù)開(kāi)發(fā)、大數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、自然語(yǔ)言處理等。不同的領(lǐng)域需要掌握不同的知識(shí)結(jié)構(gòu),所以在學(xué)習(xí)python之前最好先確定一個(gè)學(xué)習(xí)方向。
雖然不同方向的學(xué)習(xí)內(nèi)容不同,如Hadoop、spark等大數(shù)據(jù)開(kāi)發(fā)學(xué)習(xí)內(nèi)容,numpy、SciPy、Matplotlib等機(jī)器學(xué)習(xí)掌握的內(nèi)容,但基本部分的內(nèi)容是統(tǒng)一的,如列表、元組、字符串、函數(shù)、OO編程等,異常處理、數(shù)據(jù)庫(kù)開(kāi)發(fā)、網(wǎng)絡(luò)基礎(chǔ)開(kāi)發(fā)等內(nèi)容(我在頭條)我寫(xiě)了一系列關(guān)于學(xué)習(xí)python的文章,想學(xué)習(xí)的學(xué)生可以閱讀。
最后,學(xué)習(xí)Python需要大量的實(shí)驗(yàn)。