PHP中抽象類和接口的區(qū)別

最近在讀PHP文檔,發(fā)現(xiàn)網(wǎng)上的說(shuō)法和文檔的說(shuō)法不一致,手動(dòng)實(shí)踐后發(fā)現(xiàn)文檔當(dāng)然是正確的,
所以結(jié)合文檔,做下總結(jié)

抽象類(extends繼承 abstract定義)

  1. 抽象類不能被直接實(shí)例化
  2. 抽象類里有0個(gè)或多個(gè)抽象方法
  3. 抽象方法只能聲明調(diào)用方式,不能定義實(shí)現(xiàn)方式
  4. 子類必須實(shí)現(xiàn)所有父抽象類的抽象方法,且訪問控制和父類一樣或更寬松,且調(diào)用方式一致(參數(shù)數(shù)量和類型)
  5. 構(gòu)造方法同樣適用4

接口(extends接口繼承 interface定義 implements類繼承)

  1. 接口中定義的方法都為空,繼承接口的類必須實(shí)現(xiàn)所有方法
  2. 不能被直接實(shí)例化
  3. 接口中所有方法都是public
  4. 允許構(gòu)造方法
  5. 可以定義常量和類常量,但是不可以被子類或子接口覆蓋

相同點(diǎn)

  1. 不能被直接實(shí)例化
  2. 抽象方法必要在子類里實(shí)現(xiàn),且參數(shù)類型和數(shù)量一致

不同點(diǎn)

  1. 接口可以定義常量和類常量,抽象類沒限制
  2. 抽象類里的抽象方法不能是private,接口中的抽象方法只能是public
  3. 關(guān)鍵詞不同
  4. 繼承數(shù)量不同
  5. 抽象類可以繼承接口和抽象類,而不實(shí)現(xiàn)其中的抽象方法

應(yīng)用場(chǎng)景
接口:實(shí)現(xiàn)一組功能,功能之間不相互依賴,比如PHP的數(shù)組函數(shù)等
抽象類:類和類之間有關(guān)聯(lián),有公用的方法,又有自己特定的功能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概念 面向?qū)ο蟮娜蟾拍睿悍庋b,繼承,多態(tài) ;把屬性和方法封裝起來(lái)就是類。 一個(gè)類的屬性和方法被另外...
    BULL_DEBUG閱讀 2,011評(píng)論 0 1
  • 先看官方文檔中的定義:抽象類:PHP 5 支持抽象類和抽象方法。定義為抽象的類不能被實(shí)例化。任何一個(gè)類,如果它里面...
    daos閱讀 2,863評(píng)論 0 1
  • 抽象類abstract class 1 .抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法...
    薛延祥閱讀 458評(píng)論 0 1
  • 5月26日 晴 太極拳從哪里開始練呢? 拳架? 不是,是從馬步、實(shí)步、虛步開始練的。 在太極拳整套拳架中,這三種算...
    悟道閱讀 456評(píng)論 0 1
  • 這里是一面圍墻,外面的人想進(jìn)來(lái),里面的人想出去——題記 在奮斗了幾個(gè)月后,終于結(jié)束了省考。公考,考的是耐力,考的是...
    沙茶敏姐碎碎念閱讀 783評(píng)論 1 5

友情鏈接更多精彩內(nèi)容