成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么阿里巴巴建議開發者謹慎使用繼承?

開發 開發工具
從學習Java的第一天起,我們就知道Java是一種面向對象語言,而學習Java的第二天,我們就知道了面向對象的三大基本特性是:封裝、繼承、多態。所以,對于很多開發者來說,繼承肯定都是不陌生的。

 [[275871]]

從學習Java的第一天起,我們就知道Java是一種面向對象語言,而學習Java的第二天,我們就知道了面向對象的三大基本特性是:封裝、繼承、多態。所以,對于很多開發者來說,繼承肯定都是不陌生的。但是,繼承一定適合所有的場景嗎?毫無忌諱的使用繼承來做代碼擴展真的好嗎?為什么《阿里巴巴Java開發手冊》中有一條規定:謹慎使用繼承的方式進行擴展,優先使用組合的方式實現。

 

 


本文就來針對這些問題,簡單分析一下。

 

 

1.面向對象的復用技術

每個人在剛剛學習繼承的時候都會或多或少的有這樣一個印象:繼承可以幫助我實現類的復用。所以,很多開發人員在需要復用一些代碼的時候會很自然的使用類的繼承的方式,因為書上就是這么寫的(老師就是這么教的)。但是,其實這樣做是不對的。長期大量的使用繼承會給代碼帶來很高的維護成本。前面提到復用,這里就簡單介紹一下面向對象的復用技術。復用性是面向對象技術帶來的很棒的潛在好處之一。如果運用的好的話可以幫助我們節省很多開發時間,提升開發效率。但是,如果被濫用那么就可能產生很多難以維護的代碼。作為一門面向對象開發的語言,代碼復用是Java引人注意的功能之一。Java代碼的復用有繼承,組合以及代理三種具體的表現形式。

2.繼承

繼承(Inheritance)是一種聯結類與類的層次模型。指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類與類或者接口與接口之間最常見的關系。

繼承是一種is-a關系。如蘋果是水果,狗是動物,哈士奇是狗。

 

3.組合

組合(Composition)體現的是整體與部分、擁有的關系。

組合是一種has-a的關系。如汽車有一個發動機,學校有一個老師等。

 

4.組合與繼承的區別

首先,從類的關系確定時間點上,組合和繼承是有區別的:繼承,在寫代碼的時候就要指名具體繼承哪個類,所以,類的繼承關系是在編譯期就確定的。并且從基類繼承來的實現是無法在運行期動態改變的,因此降低了應用的靈活性。組合,在寫代碼的時候可以采用面向接口編程。所以,類的組合關系一般在運行期確定。另外,代碼復用方式上也有一定區別:繼承結構中,父類的內部細節對于子類是可見的。所以我們通常也可以說通過繼承的代碼復用是一種白盒式代碼復用。如果基類的實現發生改變,那么派生類的實現也將隨之改變。這樣就導致了子類行為的不可預知性。組合是通過對現有的對象進行拼裝(組合)產生新的、更復雜的功能。因為在對象之間,各自的內部細節是不可見的,所以我們也說通過組合的代碼復用是黑盒式代碼復用。因為組合中一般都定義一個類型,所以在編譯期根本不知道具體會調用哪個實現類的方法。最后,Java中不支持多繼承,而組合是沒有限制的。就像一個人只能有一個父親,但是他可以有很很多輛車。

5.優缺點對比

6.為什么組合優于繼承

相信很多人都知道面向對象中有一個比較重要的原則『多用組合、少用繼承』或者說『組合優于繼承』。從前面的介紹已經優缺點對比中也可以看出,組合比繼承更加靈活,也更有助于代碼維護。其具有不破壞封裝性、具有更好的可擴展性、支持動態組合、整體類可以改變局部類的行為等優點。所以,建議在同樣可行的情況下,優先使用組合而不是繼承。因為組合更安全,更簡單,更靈活,更高效。注意,并不是說繼承就一點用都沒有了,前面說的是【在同樣可行的情況下】。有一些場景還是需要使用繼承的,或者是更適合使用繼承。

【本文是51CTO專欄作者Hollis的原創文章,作者微信公眾號Hollis(ID:hollischuang)】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2019-09-02 15:20:28

Java開發繼承

2021-08-04 17:20:30

阿里巴巴AsyncJava

2019-06-26 07:54:53

ArrayListsubList源碼

2019-03-21 12:37:38

阿里巴巴小程序

2018-10-16 15:34:17

阿里巴巴Apache Flin大數據

2018-12-29 15:41:41

阿里巴巴程序員serialVersi

2013-08-22 09:26:38

去IOE王堅

2025-04-17 08:47:23

2019-09-17 12:35:17

阿里巴巴程序員開發者工具

2019-02-27 09:00:13

阿里巴巴for循環Java

2019-01-29 10:30:32

阿里巴巴Java字符串

2021-10-11 09:32:40

包裝類型屬性

2019-04-15 08:49:59

阿里巴巴容量集合

2016-09-21 20:28:55

阿里巴巴IOE

2020-07-30 12:16:33

阿里巴巴Apache對象

2020-09-08 16:25:18

Apache BeancopyJava

2014-10-15 11:11:45

阿里云開發者大會

2020-09-22 11:40:53

BigDecimalequalsJava

2021-09-07 17:22:43

阿里巴巴辭職高薪

2023-04-03 07:03:51

阿里巴巴List元素
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品污www在线观看 | 国产精品高清一区二区三区 | 国产精品一区二区视频 | 国产美女在线看 | 久久看精品 | 日韩午夜电影 | 久久久国产视频 | 亚洲中午字幕 | 国产免费色 | 国产精品成人一区二区 | 免费人成在线观看网站 | 97国产精品 | 99精品热视频 | 在线观看黄色电影 | 久草欧美视频 | 久久不卡区 | 免费观看国产视频在线 | 国产免费一区二区三区网站免费 | 亚洲欧美日韩中文字幕一区二区三区 | 精品在线一区 | 国产精品中文字幕在线 | 粉嫩高清一区二区三区 | 欧美中文字幕一区二区三区亚洲 | 日韩中文在线视频 | 美女爽到呻吟久久久久 | 成人在线视频网站 | 69福利影院| 成人精品鲁一区一区二区 | 一区二区三区四区电影 | 亚洲一区二区三区在线 | 午夜久久久 | 久久久久国产精品一区二区 | 久久久久久久一级 | jav成人av免费播放 | 欧美视频三区 | 日本高清不卡视频 | 国产一二区免费视频 | 羞羞色在线观看 | 欧美日韩在线国产 | 国产区一区 | 欧美日韩在线免费观看 |