最近在讀PHP文檔,發(fā)現(xiàn)網(wǎng)上的說(shuō)法和文檔的說(shuō)法不一致,手動(dòng)實(shí)踐后發(fā)現(xiàn)文檔當(dāng)然是正確的,
所以結(jié)合文檔,做下總結(jié)
抽象類(extends繼承 abstract定義)
- 抽象類不能被直接實(shí)例化
- 抽象類里有0個(gè)或多個(gè)抽象方法
- 抽象方法只能聲明調(diào)用方式,不能定義實(shí)現(xiàn)方式
- 子類必須實(shí)現(xiàn)所有父抽象類的抽象方法,且訪問控制和父類一樣或更寬松,且調(diào)用方式一致(參數(shù)數(shù)量和類型)
- 構(gòu)造方法同樣適用4
接口(extends接口繼承 interface定義 implements類繼承)
- 接口中定義的方法都為空,繼承接口的類必須實(shí)現(xiàn)所有方法
- 不能被直接實(shí)例化
- 接口中所有方法都是public
- 允許構(gòu)造方法
- 可以定義常量和類常量,但是不可以被子類或子接口覆蓋
相同點(diǎn)
- 不能被直接實(shí)例化
- 抽象方法必要在子類里實(shí)現(xiàn),且參數(shù)類型和數(shù)量一致
不同點(diǎn)
- 接口可以定義常量和類常量,抽象類沒限制
- 抽象類里的抽象方法不能是private,接口中的抽象方法只能是public
- 關(guān)鍵詞不同
- 繼承數(shù)量不同
- 抽象類可以繼承接口和抽象類,而不實(shí)現(xiàn)其中的抽象方法
應(yīng)用場(chǎng)景
接口:實(shí)現(xiàn)一組功能,功能之間不相互依賴,比如PHP的數(shù)組函數(shù)等
抽象類:類和類之間有關(guān)聯(lián),有公用的方法,又有自己特定的功能