很多東西不經常用就會忘記,當你去面試的時候別人問的細你會發懵,這裡稍微總結下:
一、什麼是抽象類別
抽象類別其實跟父類的方法有點類似,避免子類重複寫一些功能,只需要繼承這個類就擁有了父類的所有方法,不同的是抽象類別會去定義抽象方法,子類繼承的時候必須實現抽象方法,因此適用於一些有固定規範的情形
二、抽象類別特性
1、不能直接執行個體化,必須先繼承,然後再執行個體化子類
2、抽象類別至少要包含一個以上的abstract方法,這些方法就是子類必須要實現的方法,其他的方法子類直接繼承,可以覆蓋
// 強制要求子類定義這些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue(); }
3、子類必須實現抽象類別中定義的抽象方法,並且方法的可見度必須和抽象類別中一樣(或者更為寬鬆)。如果抽象類別中某個抽象方法被聲明為protected,那麼子類中實現的方法就應該聲明為protected或者public,而不 能定義為private
三、什麼是介面類
介面是一種規範,他不去定義方法的實現,只要求我這些介面必須被實現,具體怎麼實現是你的事
四、介面類的特性
1、介面類的所有方法都只包含聲明(方法名稱跟入參),不能包含方法體
interface SyncAccountInterface{ public function syncLogin($userId); public function checkUsername($username, $randomName = '');}
2、介面類的所有方法都必須在實現介面類的方法中都實現,,少一個實現就會報錯
3、一個類可以實現多個介面,介面可以解決類的繼承不能繼承多個類的問題
五、抽象類別跟介面類的異同
1、抽象類別跟介面類都包含了子類必須去實現的方法,不同的是抽象類別還可以包括其他方法子類不用去實現,直接繼承或覆蓋這些方法,但標識為abstract的方法必須去實現。介面類不同,裡面所有的方法子類必須去實現。
2、一個類只能繼承一個類,但可以實現多個介面,因此在不同的使用場合我們需要抽象類別,也需要介面,根據使用場合定