抽象 abstract
最近對抽象有些不熟悉,那么先談談抽象。 抽象在java中常常表現為抽象類和抽象方法,即被abstract關鍵字修飾的類和方法。
抽象類:被abstract修飾的類
1 和接口不同,抽象類中可以有非抽象的方法,也可以有抽象的方法,而接口中只允許有抽象方法
2 如果一個抽象類被一個非抽象的子類繼承,那么父類的抽象方法就必須被子類重寫(附:重寫發生在父類與子類,形參列表相同。重載發生在同一個類里面,形參列表不同)。
3 抽象類不能創建本身的實例,但是可以利用多態,使父類(抽象類)的引用指向子類的對象,創建子類的實例。
4 基於上一條件可以得知,抽象類不能用final修飾,抽象方法也是。
抽象方法:沒什么好說的,沒有方法體的方法,可以被非抽象子類重寫。
封裝:
一般用private修飾符修飾,將類的成員屬性私有化,隱藏內部實現細節,僅對外提供公共的getset方法。封裝的優點在於隱藏了代碼實現細節,提高了安全性。
繼承:
一般用extends修飾符表示類與類之間的繼承關系。
java只支持單繼承,即一個子類只能擁有一個父類。但是可以多實現。
子類可以繼承父類的屬性和方法,但是不能繼承父類的私有化的屬性以及構造方法。子類在實例化的時候會先調用父類的構造。
如果一個類沒有父類,那么默認繼承基類Object。
繼承的優點和缺點:
提高了代碼的復用性和重用性,是多態產生的前提。但是也增加了類與類之間的耦合性,違背軟件開發高內聚、低耦合的原則。
多態:
多態的實現有三個條件:
有繼承關系
有方法重寫
有父類引用指向子類對象
多態的優點:
提高了程序的擴展性(基於此,多使用面向抽象編程)
降低了代碼之間的耦合