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
来修饰,而接口不须要