OOP.3
抽象方法和抽象类
在OOP中,一个类有多个子类,而且每一个类至少含有一个公共的方法作为外部代码访问的接口,而抽象方法是为了方便继承引入的。
抽象方法:在类里面定义设有方法体的方法就是抽象方法,在类的声明时加“abstract” eg. abstract function fun();
抽象类:只要类里面有一个抽象的方法,这个了类就是抽象方法,也用“abstract”修饰,在抽象类里面可以有不是抽象的方法和成员修饰。
* 抽象类不能实例化
声明抽象类的作用:把抽象方法作为子类重载的模板使用,定义抽象类就相当于定义了一种规范。这种规范要子类准守,子类继承抽象后,把抽象类里面的抽象方法按子类的需求实现。*子类必须把父类的抽象方法全部实现,否则子类还是抽象类
存在抽象方法,那么子类还是抽象类,还是不能实例化,为什么非要从抽象类中继承? 因为要实现一些功能就必须从抽象类中继承,否则实现不了,如果继承了,就必须实现其中的抽象方法。
abstarct class DEMO{
var $test;
function fun(){...};
abstract functiom fun1();
}
$demo =new DEMO; //错误,因为抽象类不能实例化
class test extends demo{
function fun1(){...};
}
$test=new test(); //正确,子类中实现了抽象方法。可以实例化
接口:因为每个类都只有一个父类,为了解决这个问题。PHP引入了接口,如果一个抽象类里面的所以方法都是抽象方法,那么我们就换一种声明方法使用“接口”,接口里面的所以方法都是抽象方法,在接口里面不能声明变量,而且所以成员都是“public”权限。
接口的声明:interface 接口名{...}
<?php
interface one{
const constant='constant value';
public functiom fun1();
public functiom fum2();
}
?>
<?php
interface two extends one{ //用EXTENNDS让一个接口去继承另外一个接口
...
}
?>
<?php
claas three implements one{ //定义的一个接口的子类去实现接口中的全部抽象方法使用关键字 “implements”
function fun1(){...};
function fun2(){...};
}
?>