抽象類&介面
abstract修飾類
此類不能例項化
抽象類中一定有構造器,便於子類例項化時呼叫(涉及:子類物件例項化的全過程)
abstract修飾方法
抽象方法只有方法的宣告,沒有方法體
包含抽象方法的類,一定時一個抽象類。反之,抽象類中可以沒有抽象方法的
若子類重寫了父類中的所有的抽象方法,此子類方可例項化
若子類沒有重寫父類中的所有的抽象方法,則此子類也是一個抽象類,需要使用abstract修飾
注意點:
-
abstract不能用來修飾:屬性、構造器等結構
-
abstract不能用來修飾私有方法、靜態方法、final的方法、final的類
介面
介面的使用
-
介面使用interface來定義
-
Java中,介面和類是並列的兩個結構
-
如何定義介面:定義介面中的成員
-
jdk7及以前:只能定義全域性常量和抽象方法
全域性常量:public static final的,(可以省略)
抽象方法:public abstract
-
jdk8L:除了定義全域性常量和抽象方法之外,還可以定義靜態方法、預設方法
-
介面中不能定義構造器的!意味著介面不可以例項化
-
Java開發中,介面通過讓類去實現(implements)的方式來使用。
如果實現類覆蓋了介面中的所有抽象方法,則此實現類就可以例項化
如果實現類中沒有覆蓋介面中所有的抽象類,則此實現類仍為一個抽象類
-
Java類可以實現多個介面 -----》彌補了Java單繼承的侷限性
格式:class AA extends BB implements CC,DD,EE;
-
介面與介面之間可以繼承,而且可以多繼承
-
介面滿足多型性
-
介面實際上就是一種規範
注意:
-
介面中定義的靜態方法,只能通過介面來呼叫
-
通過實現類的物件,可以呼叫介面中的預設方法
如果實現類重寫了介面中的預設方法,呼叫時,仍然呼叫的是重寫以後的方法
-
如果子類(或實現類)繼承的父類和實現的介面中聲明瞭同名同參數的預設方法,那麼子類在沒有重寫此方法的情況下,預設呼叫的是父類中的同名同參數的方法。 類優先原則
-
如果實現類實現了多個介面,而這多個介面中定義了同名同參數的預設方法,那麼在實現類沒有重寫此方法的情況下,報錯。 ---》介面衝突。這就需要我們必須在實現類中重寫此方法。
-
呼叫介面中預設的方法:介面名. super.方法
-