在这次课,我们要掌握两个概念:抽象类,多态。二者之间有着紧密的联系。
多态:不同的对象对于同一行为表现出不同的形态。比如:
动物都有进食的行为,老虎和蛇都属于动物,但进食的方式却不一样。
老虎:撕咬食物
蛇:直接吞咽
那么,如何表达老虎、蛇、动物 之间的关系呢
<?php
//抽象类
abstract class Animal
{
//抽象方法
abstract protected function eat();
}
//老虎,继承动物
class Tiger extends Animal
{
//具体实现
public function eat()
{
echo '老虎撕咬食物吃';
}
}
//蛇,继承动物
class Snake extends Animal
{
//具体实现
public function eat()
{
echo '蛇直接吞咽食物吃';
}
}
$t = new Tiger();
$t->eat();
echo '<br>';
$s = new Snake();
$s->eat();
我们把动物定义为抽象类,因为无法明确其进食行为,所以写成了抽象方法
老虎继承动物类,有明确的进食行为
蛇继承动物类,也有明确的进食行为
abstract :表示抽象的,可以修饰类名,方法名
对象抽象类,有以下几点 需要注意:
- 抽象方法没有方法体,如:abstract protected function eat();
- 有抽象方法的类必须是抽象类
- 抽象类不能实现化,没有自己的对象,即: $n = new Animal() 是错误的。
- 抽象类都是父类,它下面有子类
- 子类继承抽象类后,必须实现父类所有的抽象方法,即 Tiger类必须有 eat() 方法的实现
- 子类重写父类的方法,这就是多态
面向对象中的多态非常常见,大部分表现在继承时,不同的子类对于同一行为表现各种各样的形态。