abstract
修飾private
修飾,由於抽象類不能被實例化,私有成員沒有意義。abstract
還能夠修飾方法,稱之爲抽象方法:抽象方法所在的類必須是抽象類,抽象方法不能有方法體<?php
// 抽象類 abstract
abstract class Human{
// 普通方法
public function show(){}
// 抽象方法,抽象方法存在的類必須是抽象類
// 抽象方法不能有方法體
public abstract function eat();
};
// 抽象類不能被實例化
// new Human();
// 繼承抽象類的要麼爲抽象類,要麼實現抽象類的全部抽象方法。
class Man extends Human{
// 實現抽象方法 eat
public function eat(){}
};
// 能夠正常實例化
new Man();
// 抽象子類繼承抽象類
abstract class Woman extends Human{
public abstract function makeup();
}
abstract class Wo extends demo{
// 實現抽象方法 eat
public function eat(){}
// 實現抽象方法 makeup
public function makeup(){}
}
// 只有實現了抽象類和繼承的抽象類的全部全部抽象方法,才能夠實例化
new Wo();
複製代碼
PHP是單繼承的,爲了解決這個問題,PHP引入了接口。接口是一種特殊的抽象類,而抽象類又是一種特殊的類。php
<?php
interface 接口名{}
class 類名 implements 接口名{}
複製代碼
接口成員: 在接口內部定義的成員markdown
const
abstract
關鍵字,由於接口方法都是抽象方法)<?php
interface Humen{
// 接口常量
const NAME = '人';
// 接口抽象方法
public function eat();
public static function show();
}
複製代碼
// 實現接口:實體類
class Man implements Humen{
// 必須實現接口裏的全部的抽象方法
public function eat(){
// 能夠訪問常量
echo self::NAME;
}
public static function show(){}
}
// 實現接口:抽象類
abstract class Women implements Humen{};
複製代碼
class Women implements Humen{
// 不容許重寫接口常量
const NAME = '小孩';
// 不容許使用其餘訪問修飾符,必須使用public
private function eat();
};
複製代碼
接口繼承: 接口能夠被接口繼承函數
interface A{}
interface B{}
// 接口繼承
interface C extends A{}
// 接口多繼承
interface D extends A,B{}
複製代碼
總結:ui
implements
實現,而抽象類使用extends
關鍵字繼承。abstract
來修飾,而接口不須要