一、抽象类和抽象方法
1,抽象类是一种特殊的类,接口是一种特殊的抽象类,而多态就要使用到抽象类或是接口。
2,抽象方法就一个类中的方法,没有方法体的方法。例如:function test();
3,如果一个方法是抽象方法,就必须使用abstract修饰。例如:abstract function test();
4,抽象类就是一个类中有一个方法是抽象的,那这个类就是抽象类。
5,如果一个类是抽象类,则这个类必须要使用abstract修饰。
6,在抽象类中可以声明成员属性,常量,非抽象方法。
7,抽象类中不能实例化对象(不能通过抽象类去创建一个抽象类的对象)。
8,要想使用抽象类,就必须使用一个类去继承抽象类,而且要想使用这个子类,也就是让子类可以创建对象,子类就必须不能再是抽象类。子类可以重写父类的方法(给父类方法加上方法体)。
9,抽象类和接口一样,就是定义一些规范,让子类按这些规范去实现自己的功能。
10,抽象类目的就是将你自己写的程序模块,加入到原来写好的程序中。
二接口与面向对象中多态的应用
1,接口和抽象类作用相同。
2,接口的声明和抽象类不一样。
3,接口被实现方式不一样。
4,接口中的所有方法必须是抽象方法,只能声明抽象方法(不需要使用abstract修饰)。
5,接口中的成员属性,只能声明常量,不能声明变量。
6,接口中的成员访问权限,都必须是public,抽象类中最低的权限是protected。
7,接口声明方式:
interface Demo{
const USER="admin"; -->声明一个常量。
function fun1();
}
8,使用一个类去实现接口,不是使用extends关键字,而使用implements关键字,例如:
9,可以使用抽象类去实现接口中的部分方法,如果想让子类可以创建对象,则必须实现接口中的全部抽象方法。
10,普通类(class)---接口,抽象类(abstract)---接口,则使用implements关键字,接口---接口,使用extends关键字。
-
接口:
interface Demo{
const USER="admin"; -->声明一个常量。
function fun1();
}
①普通类(class)---接口
class Index implements Demo{
function fun1(){
}
}
②抽象类(abstract)---接口
abstract Class index2 implements Demo{
} -->我们可以在添加一些抽象方法,然后在声明个类继承这个抽象类,来实现接口和抽象类。
②接口---接口
interface Index3 extends Demo{
function fun2();
function fun3();
}11,一个类可以去实现多个接口(按多个规范去开发子类),例如:interface Demo{
const USER="admin"; -->声明一个常量。
function fun1();
}
interface Demo2 extends Demo{
function fun2();
}
interface Demo3{
function fun3();
}
class Index implements Demo2,Demo3{
function fun1(){
}
function fun2(){
}
function fun3(){
}
}
12,一个类可以在继承一个类的同时,再实现一个或者多个接口(先继承类再实现接口),例如:
class Index{
function fun1(){
}
}
interface Demo{
funtion fun2();
}
class Index2 extends Index implements Demo{
function fun1(){
}
function fun2(){
}
}
13,多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反映效果,例如:
interface Test{
function a();
function b();
}
class One implements Test{
function a(){
echo "aaaaaaaaaaaaaaa";
}
funtion b(){
echo "bbbbbbbbbbbbbbb";
}
}
class Two implements Test{
function a(){
echo "111111111111111";
}
funtion b(){
echo "222222222222222";
}
}
$str=new One;或者$str=new Two;
$str->a();
$str->b();