PHP面向对象 ——多态
接口
接口(interface)是抽象方法和静态常量定义的集合。
接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
接口中没有其它类型的内容
接口的定义
/**
* 接口可以认为是特殊的抽象类,但是其实它本身是一个特殊的类别
* 关键字 interface
* 在接口中只能定义公共的抽象函数方法和静态的常量
* 接口中的抽象函数方法可以省略public关键字,同时abstract关键字不需要书写出来
* Interface IFly
*/
interface 接口名{
public getName();
public setName($name);
}
在接口中的抽象方法只能是 public 的,默认也是 public 权限。并且不能设置成 private 或者 protected 类型
抽象
可以使用 abstract 来修饰一个类或者方法。
用 abstract 修饰的类表示这个类是一个抽象类, 用 abstract 修饰的方法表示这个方法是一个抽象方法。
抽象类不能被实例化。
抽象方法是只有方法声明,而没有方法的实现内容。
可以使用 abstract 来修饰一个类。
用 abstract 修饰的类表示这个类是一个抽象类。
抽象类不能被实例化。
用 abstract 修饰的类表示这个方法是一个抽象方法。
抽象方法,只有方法的声明部分,没有方法体。
抽象方法没有 {} ,而采用 ; 结束。
一个类中, 只要有一个抽象方法, 这个类必须被声明为抽象类。
抽象方法在子类中必须被重写。
多态
对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
多态这个概念,在 Java 中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。
在 PHP5 中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5 中多态的是变量。我们只能说在 PHP5 中,多态应用在方法参数的类型提示位置。
一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。
所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。
简单的说,一个类拥有其父类、和已实现接口的身份。
多态的实现:
1 通过实现接口实现多态
2 通过继承实现多态