Java 繼承與接口的關係

  在看Netty中NioEventLoop的UML圖時,感覺非常複雜,如下圖所示:

  

wKiom1njEjSTKK1FAAD_bnD1apY230.png

    找不到重點,找不到主線,此時內心生無可戀。

   

    從而,激發出困擾了我很久的一個問題:到底繼承與接口 啥關係?

   

    這個問題,前幾天也請教過同事,也並沒有說出什麼關鍵點來。

    

    然後,對着此圖沉思了良久,終於悟出一點自己的見解:【以下僅供參考】    

    

    1、繼承,是一種血緣關係,是一個家族;是活的(感覺有生命特性);

       一個類只能有一個父類,可以直接調用/繼承父類的API,也可以覆寫父類的API


    2、接口,是一個工具,是一種輔助功能的體現;是死的(無生命特性,僅僅是一個工具而已);

       如一個類實現了接口,就好像一個人,穿上鋼鐵俠的衣服,能力大增;但它的本質還是一個人;

       或者說,一個人,具有了車,飛機之後,這個人的行駛速度極大提高;但,本質上還是一個人;

       這些鋼鐵俠的衣服、車、飛機、手機就是一個工具,一個具體組件,模塊,或者說插件而已,是

       一種額外的輔助類的功能、或者認爲是輔助人的功能而已,並沒有改變人的根本屬性。

       因此,類也是,同一個類可以同時實現不同的接口(如可以有車,或者穿鋼鐵俠的衣服)但是,

       本質上並沒有變,只是增加/提高了額外的行爲能力


  •  一句話總結:

       繼承,是一種血緣關係的表現;

       接口,就是類的額外工具

    

   此時,重新對上面的圖,進行修改,去掉接口(也就是去掉額外的功能,看本質),如下所示:

  

wKiom1njEjTxV_AdAADqEbsc08s046.png

     可以看出來,應該具有3條主線,然後再具體分析。



  • 感想:

     當我們學一樣東西時,最好有自己的想法,見解;

     單純的依賴別人的總結可能不能很好的理解;

     用自己的語言,說出來,可能纔是最好的。

     這個過程可能需要翻閱大量的資料來總結整理,

     一旦成功,可以記憶很長時間。

     能不能給別人解釋清楚,來驗證你到底有沒有真正掌握住。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章