一、抽象方法与抽象类1、抽象方法:如果一个方法没有方法体(没有{},直接以分号结尾,用abstract关键字修饰方法),则为抽象方法2、抽象类:如果类有A方法是抽象方法,那么这个类就是抽象类,用abstract修饰注意:1.抽象类中不一定有方法2.抽象类中有抽象方法3.抽象类不能创建对象4.其他方面和一般类完全一样5.抽象类必须有子类,子类会覆盖抽象类的抽象方法,会有方法体6.子类必须覆盖创建对象的所有抽象方法。如果只实现了部分抽象方法,那么子类还是一个抽象类3.抽象方法的作用:规定子类必须有(覆盖)这个方法,具体功能交给类子类(根据自己的功能)实现4.抽象类的作用:抽象类需要子类类的结构是规范的(程序员必须写一定的方法)abstractclassPerson{abstractfunctioneat();抽象函数睡眠();功能步行(){}};classMenextendsPerson{functioneat(){echo"Eatrice
";}functionsleep(){echo"Bed
";}};classWomenextendsPerson{functioneat(){echo"吃面条
";}functionsleep(){echo"bed
";}};$s=新人;$s->eat();//吃米饭二、面向对象的接口技术1、接口是一种特殊的抽象类(具有抽象类的所有特性)2、接口与一般抽象类的区别(接口也是规范)a.接口中的所有方法都必须是抽象方法b.接口中的属性必须是常量(const声明)c.接口里面的权限必须是public的(默认不需要声明),抽象类可以有protect埃德。声明接口不使用class,而是interfacee。接口中的抽象方法不需要abstract特殊声明,因为都是f。您可以使用class::访问属性/方法interfaceDemo{constNAME="wo";functiontest();}3.接口的特点a.一个接口可以继承另一个接口(扩展),但只有扩展关系,没有覆盖关系b.可以用一个通用的类来实现接口的*所有方法*(抽象方法必须全部覆盖),即存在覆盖关系c。可以用一个抽象类来实现接口的*部分方法*,即存在覆盖关系d。只要是覆盖关系,即使用类/抽象类实现接口,就必须使用implements关键字e.extends:一个类只能有一个父类f.implements:可以实现interface同时使用extends继承其他类,可以实现多个接口(必须先extend,再implements)g.实现多个接口,以逗号分隔InterfaceDemo{constNAME="wo";函数测试1();功能测试2();};接口测试扩展演示{函数test3();};类世界{函数test4(){}};接口Abc{函数test5();}classFinaextendsWorldimplementsTest,Abc{functiontest1(){echo"test1
";}functiontest2(){echo"test2
";}functiontest3(){echo"test3
";}函数测试4(){echo"test4
";}functiontest5(){echo"test5
";}};$p=新菲娜;$p->test1();//测试1$p->test2();//测试2$p->test3();//测试3$p->test4();//测试4$p->test5();//test5三、多态性(每个子类的形态功能不同)1、必须有继承关系,父类最好是接口或者抽象类。下面是模拟USB接口下鼠标键盘的多态,以及用户调用接口USB{constWIDTH=12;常量高度=3;函数加载();函数运行();功能停止();};classMouseimplementsUSB{functionload(){echo"鼠标加载成功!
";}functionrun(){echo"运行鼠标函数!
";}functionstop(){echo"鼠标工作结束!
";}};classKeyboardimplementsUSB{functionload(){echo"Keyboardloadedsuccessfully!
";}functionrun(){echo"运行键盘功能!
";}functionstop(){echo"键盘工作结束!<br>";}};classComputer{//只要是继承USB抽象类的对象,不管是什么设备,都会执行三个方法functionuseUSB(USB$usb){$usb->load();$usb->run();$usb->stop();}};classWorkers{functionwork(){$c=newComputer;$m=newMouse;$k=newKeyboard;$c->useUSB($m);$c->useUSB($k);}};$w=newWorkers;$w->work();//加载鼠标成功!//运行鼠标function!//鼠标工作结束!//加载键盘成功!//运行键盘功能!//键盘工作结束!
