zoukankan      html  css  js  c++  java
  • 为什么要定义那么多接口?

    主角是一个单独的类,这里我们主要用怪物说明接口的用法:

    怪物有很多种, 按地域分:有的在天上飞,有的在地上跑,有的在水里游

    按攻击方式分:有的能近距离物理攻击,有的能远距离射击

    假设游戏里需要这样的几种怪—— 野狗:地上移动,近距离攻击

     黑熊:地上移动,近/远距离攻击

    秃鹫:地上/天上移动,远距离攻击

     食人鱼:水中移动,近距离攻击

     鳄鱼:地上/水中移动,近距离攻击 显然,如果我们将每一种怪物定义为一个类,那就不是面向对象的程序开发了,我们应当使用接口:

    interface OnEarth{//陆地接口 int earthSpeed;//陆地移动速度 void earthMove();//陆地移动方法 }

    interface OnWater{//水中接口 int waterSpeed;//水中移动速度 void waterMove();//水中移动方法 }

    interface OnAir{//空中接口 int airSpeed;//水中移动速度 void airMove();//水中移动方法 }

    interface NearAttack{//近距离攻击接口 int nearAttackPower;//近距离攻击力 void nearAttack();//近距离攻击方法 }

    interface FarAttack{//远距离攻击接口 int farAttackPower;//远距离攻击力 void farAttack();//远距离攻击方法 }

    这样一来,根据需求,我们可以选择性的继承接口:

    //野狗类
    class Tyke implements OnEarth, NearAttack{
    earthMove():void {//实现继承的方法1 }
    nearAttack():void {//实现继承的方法2 }
    }
    //黑熊类
    class BlackBear implements OnEarth, NearAttack, FarAttac{
    earthMove():void {//实现继承的方法1 }
    narAttack():void {//实现继承的方法2 }
      farAttack():void {//实现继承的方法3 }

    }
    //秃鹫类
    class Vulture implements OnEarth, OnAir, FarAttack{
    earthMove():void {//实现继承的方法1 }
    airMove():void{//实现继承的方法2 }
    void farAttack(){//实现继承的方法3 }
    }

    //食人鱼类
    class ManeatFish implements OnWater, NearAttack{
    waterMove():void{//实现继承的方法1 }
    nearAttack():void {//实现继承的方法2 }
    }
    //鳄鱼类
    class Crocodile implements OnEarth, OnWater, NearAttack{
    earthMove():void{//实现继承的方法1 }
    waterMove():void {//实现继承的方法2 }
    nearAttack():void {//实现继承的方法3 }
    }

    (AS3接口中不支持定义变量,)
     在实现接口方法的同时,也拥有了接口中定义的成员变量,这样就构成了一个有机的整体,使整个程序既体现了类的多样性,又不失结构组合的灵活性,且需要在某个特性增加其他功能,只要修改接口就可以了,其继承的类自动修改。

  • 相关阅读:
    九、Shell 流程控制
    八、Shell test 命令
    七、Shell printf 命令
    六、Shell echo命令
    五、Shell 基本运算符
    四、Shell 数组
    三、Shell 传递参数
    二、Shell 变量
    一、Shell 教程
    KVM 介绍(1):简介及安装
  • 原文地址:https://www.cnblogs.com/xcai/p/2355491.html
Copyright © 2011-2022 走看看