A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小鲁哥哥 黑马粉丝团   /  2017-8-29 10:17  /  1489 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小鲁哥哥 于 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();
结果为:
猛虎扑食
死亡缠绕

抽象类和抽象方法的细节
       一个类中有抽象方法,则该类必须声明为抽象类。
       子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。
       如果子类继续作为抽象类,则此时它可以去实现部分抽象方法,留下另一部分不去实现;
       子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马