1. 程式人生 > 其它 >抽象類&介面

抽象類&介面

抽象類(abstract)

abstract修飾類

此類不能例項化

抽象類中一定有構造器,便於子類例項化時呼叫(涉及:子類物件例項化的全過程)

開發中,都會提供抽象類的子類,讓子類物件例項化,完成相關的操作

abstract修飾方法

抽象方法只有方法的宣告,沒有方法體

包含抽象方法的類,一定時一個抽象類。反之,抽象類中可以沒有抽象方法的

若子類重寫了父類中的所有的抽象方法,此子類方可例項化

若子類沒有重寫父類中的所有的抽象方法,則此子類也是一個抽象類,需要使用abstract修飾

注意點:

  1. abstract不能用來修飾:屬性、構造器等結構

  2. abstract不能用來修飾私有方法、靜態方法、final的方法、final的類

介面

介面的使用

  1. 介面使用interface來定義

  2. Java中,介面和類是並列的兩個結構

  3. 如何定義介面:定義介面中的成員

  • jdk7及以前:只能定義全域性常量和抽象方法

全域性常量:public static final的,(可以省略)

抽象方法:public abstract

  • jdk8L:除了定義全域性常量和抽象方法之外,還可以定義靜態方法、預設方法

  1. 介面中不能定義構造器的!意味著介面不可以例項化

  2. Java開發中,介面通過讓類去實現(implements)的方式來使用。

如果實現類覆蓋了介面中的所有抽象方法,則此實現類就可以例項化

如果實現類中沒有覆蓋介面中所有的抽象類,則此實現類仍為一個抽象類

  1. Java類可以實現多個介面 -----》彌補了Java單繼承的侷限性

    格式:class AA extends BB implements CC,DD,EE;

  2. 介面與介面之間可以繼承,而且可以多繼承

  3. 介面滿足多型性

  4. 介面實際上就是一種規範

注意:

  1. 介面中定義的靜態方法,只能通過介面來呼叫

  2. 通過實現類的物件,可以呼叫介面中的預設方法

如果實現類重寫了介面中的預設方法,呼叫時,仍然呼叫的是重寫以後的方法

  1. 如果子類(或實現類)繼承的父類和實現的介面中聲明瞭同名同參數的預設方法,那麼子類在沒有重寫此方法的情況下,預設呼叫的是父類中的同名同參數的方法。 類優先原則

  2. 如果實現類實現了多個介面,而這多個介面中定義了同名同參數的預設方法,那麼在實現類沒有重寫此方法的情況下,報錯。 ---》介面衝突。這就需要我們必須在實現類中重寫此方法。

  3. 呼叫介面中預設的方法:介面名. super.方法