本帖最后由 小鲁哥哥 于 2017-8-29 10:35 编辑
PHP中的类中的抽象类
今天我们来为大家带来的是类中的抽象类
抽象类:
是一个“规定”不允许实例化的类——即该类不能 new 出一个对象!
游戏设计的背景: 有主角: 有配角: 有反面角色: 怪物 怪物分为:虎怪,蛇怪,狼怪 这些“具体”怪物,都有其自身的外形特征和行为特征 但他们又有另一些“公共”的特征: 有攻击力,有血量,有攻击行为; 这里,“怪物”类,就是一个不需要“实例化”一个具体怪物,但又需要它来对其他几种怪物(类)进行某种统一规定的类。 定义形式: abstract class 类名{ 类的成员定义。。。。。 } 抽象方法
是一个只有“方法头”,没有“方法体”的方法; 方法头:就是定义一个方法(函数)的时候的第一行的形式,不含大括号部分; 方法体:就是大括号部分; 形式: abstract 【其他修饰符】 function 方法名(【形参列表】); 为什么要抽象方法? 是为了让“下级类”去做(必须去做)某个事情,但不规定怎么做——而是由下级类具体去实现怎么做(就是方法体的内容); 抽象类和抽象方法的演示代码: [PHP] 纯文本查看 复制代码 <?php
/*传智播客出品*/
//怪物类:
abstract class Ghost{
public $blood = 100;//血量,生命值
abstract function attack();//定义抽象方法
}
//虎怪,继承怪物类,也就具有了怪物类的特征信息
class Tiger extends Ghost{
public $color = "黑白相间";
function attack(){//老虎的攻击行为
$this->blood--;//攻击消耗血量
echo "<br />猛虎扑食";
}
}
//蛇怪,继承怪物类,也就具有了怪物类的特征信息
class Snake extends Ghost{
public $length="3米";
function attack(){//蛇的攻击行为
$this->blood--;//攻击消耗血量
echo "<br />死亡缠绕";
}
}
$t1 = new Tiger();
$t1->attack();
$s1 = new Snake();
[align=left]$s1->attack(); 结果为: 猛虎扑食 死亡缠绕
抽象类和抽象方法的细节
一个类中有抽象方法,则该类必须声明为抽象类。 子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。 如果子类继续作为抽象类,则此时它可以去实现部分抽象方法,留下另一部分不去实现; 子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致。
|