抽象类,接口
抽象類
1.抽象類不允許被實例化,只能被繼承。
2.抽象類可以包含屬性和方法。
3.子類繼承抽象類,必須實現抽象類中的所有抽象方法。
?
接口
ps: jdk1.8中, 接口可以包含屬性,也能夠定義方法實現。
?
? ? 繼承關系是一種 is-a 的關系,那抽象類既然屬于類,也表示一種 is-a 的關系。相對于抽象類的 is-a 關系來說,接口表示一種 has-a 關系,表示具有某些功能。對于接口,有一個更加形象的叫法,那就是協議(contract)。
? ?抽象類更多的是為了代碼復用,而接口就更側重于解耦。
?
基于接口編程
實際上,“基于接口而非實現編程”這條原則的另一個表述方式,是“基于抽象而非實現編程”。
? ? ?越抽象、越頂層、越脫離具體某一實現的設計,越能提高代碼的靈活性,越能應對未來的需求變化。好的代碼設計,不僅能應對當下的需求,而且在將來需求發生變化的時候,仍然能夠在不破壞原有代碼設計的情況下靈活應對。而抽象就是提高代碼擴展性、靈活性、可維護性最有效的手段之一。
?
? 軟件開發中唯一不變的就是變化。
? 這條原則的設計初衷是,將接口和實現相分離,封裝不穩定的實現,暴露穩定的接口。上游系統面向接口而非實現編程,不依賴不穩定的實現細節,這樣當實現發生變化的時候,上游系統的代碼基本上不需要做改動,以此來降低代碼間的耦合性,提高代碼的擴展性。
??在面向對象編程中,有一條非常經典的設計原則,那就是:組合優于繼承,多用組合少用繼承。
? 繼承主要有三個作用:表示 is-a 關系,支持多態特性,代碼復用。而這三個作用都可以通過組合、接口、委托三個技術手段來達成。
?
?
?
?
?
??
總結
- 上一篇: 面向对象,面向过程编程
- 下一篇: 贫血模型,充血模型(领域驱动设计)