接口
定義接口
- 通過
interface
關鍵字定義接口 - 使用
implements
操作符來實現接口 - 接口定義某個類必須實現哪些方法,不需要定義方法的具體內容,所有方法都是空的
定義接口要注意一下幾點
- 接口不能包含成員變量,但可以什麼類常量
- 接口不能有構造函數
- 接口中定義的所有方法都必須是公有,這是接口的特性
- 類中必須實現接口中定義的所有方法,而且必須使用和接口定義方法一致的方式,否則會報一個致命錯誤
- 接口中的方法可以定義需要傳入的參數,類實現的時候也需要傳入
- 類可以實現多個接口,用逗號來分隔多個接口的名稱
- 實現多個接口時,接口中的方法不能有重名
- 接口也可以繼承,通過使用extends操作符
抽象
定義抽象
- 使用
abstract
關鍵字定義抽象 - 任何一個類,如果它裏面至少有一個方法是被聲明爲抽象的,那麼這個類就必須被聲明爲抽象的
- 定義爲抽象的類不能被實例化
- 被定義爲抽象的方法只是聲明瞭其調用方式(參數),不能定義其具體的功能實現
- 繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更爲寬鬆)
eg: 例如某個抽象方法被聲明爲受保護的,那麼子類中實現的方法就應該聲明爲受保護的或者公有的,而不能定義爲私有的 - 此外方法的調用方式必須匹配,即類型和所需參數數量必須一致
eg:例如,子類定義了一個可選參數,而父類抽象方法的聲明裏沒有,則兩者的聲明並無衝突
接口和抽象的區別
- 對接口的繼承使用implements,抽象類使用extends
- 接口中不可以聲明變量,但可以聲明類常量.抽象類中可以聲明各種變量
- 接口沒有構造函數,抽象類可以有
- 接口中的方法默認爲public,抽象類中的方法可以用public,protected,private修飾
- 一個類可以繼承多個接口,但只能繼承一個抽象類