php 的抽象方法和抽象类和接口
抽象方法和抽象类
1. 什么是抽象方法?
定义:一个方法如果没有方法体,则这个方法就是抽象方法。
没有方法体: 一个方法不使用 “{}”,直接使用分号结束的方法。 如果是抽象方法,必须使用 abstract 来修饰
2. 什么是抽象类?
如果一个类中有一个方法是抽象方法,则这个类是抽象类。 如果声明一个抽象类,必须使用 abstract 来修饰
注意:
- 只要使用 abstract 修饰的类就是抽象类。不一定有抽象方法
- 抽象类是一种特殊的类,在抽象类中可以有抽象方法。
- 除了在抽象类中可以有抽象方法,其他和正常的类完全一样。
注意 2:
- 抽象类不能实例化对象
- 如果看见抽象类就必须写这个类的子类。将抽象类的抽象方法覆盖(加上方法体)
- 子类必须全部实现抽象类的抽象方法。如果只实现部分,那么子类也必须是抽象类。
抽象方法的作用:
抽象方法的作用就是规定子类必须有这个方法的实现,功能交给子类。 只写出结构,而没有实现,实现交给子类按照自己的功能去实现。
抽象类的作用:
规范所有子类的写法
abstract class Person{
public $name;
public $age;
abstract function say();
public function walk(){}
function sleep(){
echo "ssssssssssssssss";
}
}
class StudentCn extends Person{
function say(){
echo "我说中国话<br>";
}
}
class StudentEn extends Person{
function say(){
echo "I speek English<br>";
}
}
$s1 = new StudentEn();
$s2 = new StudentCn();
$s1->say();
$s2->say();
复制代码
接口
抽象类是一种抽象的类,接口是一种特殊的抽象类。
- 抽象类和接口中都有抽象方法
- 抽象类和接口都不能实例化对象
- 抽象类和接口使用作用一样,都是规范
接口和抽象类相比,特殊在哪里?
- 接口中的方法,必须全部是抽象方法。所以在接口中,可以省略 abstract
- 接口中的成员属性,必须是常量(不能有变量)。
- 所有的权限必须是公有的(public)
- 声明接口使用
interface
接口应用的一些细节:
- 可以使用
extends
继承自另一个接口。(接口和接口只有扩展新抽象方法,没有覆盖的关系) - 可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法 (类与接口,抽象类与接口 =》有实现接口中的抽象方法)
- 类(抽象类)实现接口使用关键字 implements
- 实现多个接口只需要使用逗号分开即可。
interface Demo {
const NAME = "qdgithub.com";
const AGE = "3年";
function demo1();
function demo2();
function demo3();
}
interface Test extends Demo {
function test4();
}
interface Abc {
function abc();
}
class World{
function test5(){}
}
class Hello extends World implements Test,Abc{
function demo1(){}
function demo2(){}
function demo3(){
echo "我是实现接口Demo的方法";
}
function test4(){}
function abc(){}
function test5(){}
}
$h = new Hello();
$h->demo3();
复制代码
本文为作者原创文章,转载无需和我联系,但请注明转载链接。 【前端黑猫】