標籤:java 介面 繼承
在看Netty中NioEventLoop的UML圖時,感覺非常複雜,如所示:
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/08/7D/wKiom1njEjSTKK1FAAD_bnD1apY230.png" style="float:none;" title="001--原圖.png" alt="wKiom1njEjSTKK1FAAD_bnD1apY230.png" />
找不到重點,找不到主線,此時內心生無可戀。
從而,激發出困擾了我很久的一個問題:到底繼承與介面 啥關係?
這個問題,前幾天也請教過同事,也並沒有說出什麼關鍵點來。
然後,對著此圖沉思了良久,終於悟出一點自己的見解:【以下僅供參考】
1、繼承,是一種血緣關係,是一個家族;是活的(感覺有生命特性);
一個類只能有一個父類,可以直接調用/繼承父類的API,也可以覆寫父類的API
2、介面,是一個工具,是一種協助工具功能的體現;是死的(無生命特性,僅僅是一個工具而已);
如一個類實現了介面,就好像一個人,穿上鋼鐵俠的衣服,能力大增;但它的本質還是一個人;
或者說,一個人,具有了車,飛機之後,這個人的行駛速度極大提高;但,本質上還是一個人;
這些鋼鐵俠的衣服、車、飛機、手機就是一個工具,一個具體組件,模組,或者說外掛程式而已,是
一種額外的輔助類的功能、或者認為是輔助人的功能而已,並沒有改變人的根本屬性。
因此,類也是,同一個類可以同時實現不同的介面(如可以有車,或者穿鋼鐵俠的衣服)但是,
本質上並沒有變,只是增加/提高了額外的行為能力
繼承,是一種血緣關係的表現;
介面,就是類的額外工具。
此時,重新對上面的圖,進行修改,去掉介面(也就是去掉額外的功能,看本質),如下所示:
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/08/7D/wKiom1njEjTxV_AdAADqEbsc08s046.png" style="float:none;" title="002--去掉 虛線.png" alt="wKiom1njEjTxV_AdAADqEbsc08s046.png" />
可以看出來,應該具有3條主線,然後再具體分析。
當我們學一樣東西時,最好有自己的想法,見解;
單純的依賴別人的總結可能不能很好的理解;
用自己的語言,說出來,可能才是最好的。
這個過程可能需要翻閱大量的資料來總結整理,
一旦成功,可以記憶很長時間。
能不能給別人解釋清楚,來驗證你到底有沒有真正掌握住。
本文出自 “XEJ分布式工作室” 部落格,請務必保留此出處http://xingej.blog.51cto.com/7912529/1972496
Java 繼承與介面的關係