php抽象类和接口知识点整理总结
本文实例总结了php抽象类和接口相关知识点。分享给大家供大家参考,具体如下:
抽象类(一种抽象的类)
一、什么是抽象方法?
定义:一个方法如果没有方法体(一个方法,不使用{},直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法。
classPerson{ abstractfunctionsay();没有方法体的、使用abstract关键字修饰 abstractfunctionsay(){这个不是、有方法体{}, }; }
总结1.声明一个方法不使用{},而直接分号结束。2.如果是抽象方法,必须使用abstract(抽象关键字来修饰)。
二、什么是抽象类呢?
1.如果一个类中有一个方法是抽象的方法,这个类就是抽象类。
2.如果声明一个抽象类,则这个类必须要使用abstract关键字来修饰。
abstractclassPerson{ public$name; abstractfunctionsay(); abstractfunctioneat(); }
注意
1.只要使用abstract来修饰的类,就是抽象类。
2.抽象类是一个特殊的类,特殊在哪里(在抽象类中可以有抽象方法)。
3.除了在抽象类中可以有抽象方法以外,和正常的类完全一样。
注意2
1.抽象类不能实例化对象(不能创建出对象)。
$p=newPerson();//报错
2.如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)。
classstudentextendPerson() { functionsay(){//只覆盖了父类的一个 } }
3.子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果实现部分,那么还有抽象方法,他还是抽象类。
classstudentextendPerson() { functionsay(){//只覆盖了父类的一个 } }
抽象方法作用
1.抽象方法就是一个规定,规定子类必须有这个方法的实现,功能交给子类实现。
只写出来结构,没有实现,实现交给具体的子类(按自己功能实现)。
classstudentextendPerson() { functionsay(){ } //覆盖了父类两个抽象方法 functioneat(){ } }
抽象类作用
就是要求子类的结构,所以抽象类就是一个规范。(只有形)
接口(接口是一种特殊抽象类,接口也是一种特殊的类)
接口和抽象类的相同点
1.抽象类和接口都有抽象方法。
2.抽象类和接口不能创建实例对象。
3.抽象类和接口使用意义相同。定义一种规范。
不同点
1.接口中的方法必须全要是抽象方法(不能用不抽象的方法),所以在接口的所有方法中不使用abstract,直接使用分号结束。
2.接口中的成员属性,必须是常量(不能有变量)。
3.接口所有权限必须是公有的public
4.声明接口不使用class使用interface,
interfacePerson{ public$name;//不能声明变量报错 constNAME='tom'//可以声明常量 functiontest();//因为接口中全部是抽象方法所以省去abstract。 functiontest1(); Protectfunctiontest3()报错只可以是public } $re=newPerson;//报错不可以创建实例化对象。 echoPerson::NAME;输出常量。
接口应用的一些细节
1.可以使用extends,让一个接口继承另一个接口(接口和接口的关系---只有扩展抽象方法,没有覆盖关系)。
2.可以使用一个类,来实现接口中的全部方法,也可也使用一个抽象类,来实现接口的部分方法。(类与接口 或者抽象类与接口,有覆盖的关系,---重写---实现接口中的抽象方法)
interfaceDemo{ constNAME='tom'; publicfunctiontest(); publicfunctiontest1(); } interfacetestextendsDemo{//接口对接口只有扩展 functiontest2(); }
3.只要在子类中有覆盖的动作,就不要使用extends(继承扩展)这个关键字,使用implements实现。
interfaceDemo{ constNAME='tom'; publicfunctiontest(); publicfunctiontest1(); } interfacetestextendsDemo{//接口对接口只有扩展 functiontest2(); } classHelloextendstest{}//报错//类对接口有覆盖 abstractclassHelloimplementstest{ }//不报错
4.一个类可以在继承另一个类的同时,使用implements实现接口(可以实现多个接口)(一定要先继承,在实现接口)。
interfaceDemo{ constNAME='tom'; publicfunctiontest(); publicfunctiontest1(); } interfacetestextendsDemo{//接口对接口只有扩展 functiontest2(); } ClassWord{ Functiontest5(){ } } classHelloextendsWordimplementstest{ //可以使用接口 functiontest(){ } functiontest1(){ } //实现接口 functiontest2(){ } //functiontest5(){ } }
5.实现多个接口,只需使用逗号分开即可。
php中一个类只要一个父类。
interfaceDemo{ constNAME='tom'; functiontest1(); } interfaceTestextendsDemo{ functiontest2(); } classWorld{ functiontest3(); } interfaceAbc{ functiontest6{} } classHelloextendsWorldimplementsTest,Abc{ functiontest1(){ }; functiontest2(){ echo11; }; functiontest3(){ }; functiontest6(){ }; } $re=newHello; $re->test2();//输出11
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。