PHP接口和抽象

接口

定義接口

  1. 通過interface關鍵字定義接口
  2. 使用implements操作符來實現接口
  3. 接口定義某個類必須實現哪些方法,不需要定義方法的具體內容,所有方法都是空的

定義接口要注意一下幾點

  1. 接口不能包含成員變量,但可以什麼類常量
  2. 接口不能有構造函數
  3. 接口中定義的所有方法都必須是公有,這是接口的特性
  4. 類中必須實現接口中定義的所有方法,而且必須使用和接口定義方法一致的方式,否則會報一個致命錯誤
  5. 接口中的方法可以定義需要傳入的參數,類實現的時候也需要傳入
  6. 類可以實現多個接口,用逗號來分隔多個接口的名稱
  7. 實現多個接口時,接口中的方法不能有重名
  8. 接口也可以繼承,通過使用extends操作符

抽象

定義抽象

  1. 使用abstract關鍵字定義抽象
  2. 任何一個類,如果它裏面至少有一個方法是被聲明爲抽象的,那麼這個類就必須被聲明爲抽象的
  3. 定義爲抽象的類不能被實例化
  4. 被定義爲抽象的方法只是聲明瞭其調用方式(參數),不能定義其具體的功能實現
  5. 繼承一個抽象類的時候,子類必須定義父類中的所有抽象方法;另外,這些方法的訪問控制必須和父類中一樣(或者更爲寬鬆)
    eg: 例如某個抽象方法被聲明爲受保護的,那麼子類中實現的方法就應該聲明爲受保護的或者公有的,而不能定義爲私有的
  6. 此外方法的調用方式必須匹配,即類型和所需參數數量必須一致
    eg:例如,子類定義了一個可選參數,而父類抽象方法的聲明裏沒有,則兩者的聲明並無衝突

接口和抽象的區別

  1. 對接口的繼承使用implements,抽象類使用extends
  2. 接口中不可以聲明變量,但可以聲明類常量.抽象類中可以聲明各種變量
  3. 接口沒有構造函數,抽象類可以有
  4. 接口中的方法默認爲public,抽象類中的方法可以用public,protected,private修飾
  5. 一個類可以繼承多個接口,但只能繼承一個抽象類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章