區別:
1、對介面的使用是通過關鍵字implements。對抽象類別的使用是通過關鍵字extends。當然介面也可以通過關鍵字extends繼承。
2、介面中不可以聲明成員變數(包括類靜態變數),但是可以聲明類常量。抽象類別中可以聲明各種類型成員變數,實現資料的封裝。(另JAVA介面中的成員變數都要聲明為public static final類型)
<?php abstract class Father {function meth1() {echo "meth1...<br>";}abstract function meth2();public $var1="var1";public static $var2="var2";const Var3="Var3";}class Son extends Father {function meth2() {echo "meth2 of Son...<br>";}}$s=new Son();echo $s->var1."<br>";echo Father::$var2."<br>";echo Father::Var3."<br>";Interface IFather {//public $iVar1="iVar1"; 此處介面定義中不能包含成員變數//public static $iVar2="iVar2"; 此處介面定義中不能包含靜態變數const iVar3="iVar3";function iMeth1();}Class ISon implements IFather {function iMeth1() {echo "iMeth1...<br>";}}$is=new ISon();echo IFather::iVar3;?>
3、介面沒有建構函式,抽象類別可以有建構函式。
4、介面中的方法預設都是public類型的,而抽象類別中的方法可以使用private,protected,public來修飾。
5、一個類可以同時實現多個介面,但一個類只能繼承於一個抽象類別。
抽象類別還是介面。 如果要建立一個模型,這個模型將由一些緊密相關的對象採用,就可以使用抽象類別。如果要建立將由一些不相關對象採用的功能,就使用介面。 如果必須從多個來源繼承行為,就使用介面。 如果知道所有類都會共用一個公用的行為實現,就使用抽象類別,並在其中實現該行為。