当类中有一个方法,他没有方法体,也就是没有花括号,直接分号结束,像这种方法我们叫抽象方法,必须使用关键字abstract定义。
如:public abstract function fun();
包含这种方法的类必须是抽象类也要使用关键字abstract加以声明。(即使用关键字abstract 修饰的类为抽象类)
抽象类的特点:
不能实例化,也就是不能new成对象
若想使用抽象类,就必须定义一个类去继承这个抽象类,并定义覆盖父类的抽象方法(实现抽象方法)
接口
PHP与大多数面向对象编程语言一样,不支持多重继承,也就是说每个类智能继承一个父类。为了解决这个问题,PHP引入了接口,接口的思想是指定一个实现了该接口的类必须实现的一系列函数。
定义格式:interface 接口名称{
//常量成员 (使用const 关键字定义)
//抽象方法 (不需要使用abstract关键字)
}
使用格式:class 类名 implements 接口名1,接口名2{... ...}
当你关注一个食物的本质的时候,用抽象类;当你关注一个操作的时候,用接口
接口是对动作的抽象,表示这个对象能做什么,对垒的局部行为进行抽象。
抽象类是对根源的抽象,表示这个类是什么,对象的整体进行操作,对一类食物的抽象描述。
比如:男人、女人,这两类(如果是类的话),他们的抽象类是人。说明,他们都是人,人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类实现它。
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
区别:
接口是抽象类的比变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
接口可以多继承,抽象类不行
接口定义方法,不能实现,而抽象类可以实现部分方法。
接口中基本数据类型为static而抽象类不是的。
接口中不能含有静态代码块以及静态方法,而抽象类可以含有静态方法和静态代码块。
对象的多态性:是指在父类中定义的属性或行为被子类继承之后,可以具有不同数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其格各个子类中具有不同的语义。