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