一、抽象类与接口
1、抽象类:拥有抽象方法的类就是抽象类(没有抽象成员属性)
抽象方法:没有方法体的方法就是抽象方法
什么是没有方法体?没有花括号
所有抽象类和抽象方法都需要abstract关键字修饰
一个抽象类里面可以拥有多个抽象方法,也可以拥有多个非抽象方法
抽象方法不能被声明为私有
继承抽象类的时候,方法也要遵守3,2,1原则
继承抽象类的时候,方法体中的形参数量要和抽象方法保持一致
继承抽象类的时候,抽象方法中的形参如果有默认值,则实现的方法也要有默认值,值可以不一样。
抽象类可以拥有成员属性
例:abstract class Demo{
abstract function show($n=‘abc‘);
abstract function test();
function say(){
echo "青山不改绿水长流,你还会回来的!!";
}
}
class Son extends Demo{
function show($abc=10){}
function test(){}
}
$s=new Son;
$s->say();
2、接口技术
接口 interface
所有的方法都是抽象的,这个类就是接口,接口我们不用class声明,用interface声明
接口不能拥有成员属性,但是可以拥有常量
一个接口可以被一个类实现(implements),该类必须全部实现了接口中所有的抽象方法
一个类只能继承一个父类(抽象类),但可以实现多个接口
一个类除了继承外也可以实现接口。
一个类是先继承后实现接口
接口与接口之间也可以继承
例:interface Demo{
function show();
function test();
}
interface Demo2 extends Demo{
function show2();
}
class Father {
function say(){
echo ‘说了‘;
}
function show(){
}
}
class Son extends Father implements Demo2{
function show(){
}
function test(){
}
function show2(){
}
}
$s=new Son;
$s->say();