问题
很多类里面用很多方法你不断的在重复写。
- 我不是可以重写一个类每个公共类我个实例化一个这个公共类,调用相同的方法就可以了
- 抽象类做的工作也就是这个,不过他省去了你实例化的这个步骤
比如人必须吃饭,约会一般要吃饭、看电影,但不一定表白
1、抽象类不能实例化
2、抽象类存在的目的是为了让子类继承
3、抽象类的定义和普通类的定义一样,只不过前面加了一个关键字abstract
4、抽象类里面一般都有抽象方法
抽象方法是用来让自子类实现的,而且子类必须实现,不实现就报错
5、抽象方法只能public或者protected
6、抽象方法如果有参数
抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也都要有
7、抽象类可以继承抽象类,子类在实现的时候所有的抽象方法都得实现
abstract class shopWriter{
public function writer();
}
class XmlWriter extends shopWriter{
public function writer(){
...实现具体的xml方法
}
}
class jsonWriter extends shopWriter{
public function writer(){
...实现具体的json方法
}
}
二、接口
当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候php接口类就起到作用了
- interface 接口
- implement 实现
你女朋友的爸妈的愿望;有车有房有存款
- 接口中的方法都是抽象方法,所以abstract可以省略
- 接口中的方法必须public
- 接口中只能规定方法,不能写属性
- 一个类可以实现多个接口,中间用逗号
- 一个类可以先继承父类,然后再实现接口
- 接口可以继承接口,但是里面的方法都要实现
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;