首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Actionscript 3可共享函数(接口?)

Actionscript 3可共享函数(接口?)
EN

Stack Overflow用户
提问于 2010-10-06 22:26:55
回答 3查看 298关注 0票数 0

最近我一直在研究OOP方法,下面是我一直在想的事情。

假设我们有以下情况。我们收集了宠物狗,猫,老鼠。每只宠物都有相同的行为:跑步、进食、睡觉。而且,它们都有不同的视觉表现形式。

而不是创建3个单独的类并重新创建这3个函数,如下所示:

  • dog
  • eat函数
  • 运行函数
  • 睡眠函数

猫和老鼠也是如此。

是否有更好的方法简单地在这些不同的类之间“共享”一组函数,并在某种程度上区别这些函数依赖于所选类的行为(狗的行走速度可能比猫快,猫的睡眠可能比老鼠多等等)。

我看过接口,但据我所知,您实际上无法编写函数,接口只是一个类应该具有的需求列表。可能是大错特错。(非常感谢:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-06 22:40:37

听起来你只是需要遗产?

代码语言:javascript
运行
复制
class Animal {
    public function eat():void { stuff }
    public function run():void { stuff }
    public function sleep():void { stuff }
}

class Dog extends Animal {
}

...

我的游戏里到处都是这样的东西。

要根据子类的不同而有所不同:

如果这是一个很大的更改,那么显然您应该重写子类中的方法。

代码语言:javascript
运行
复制
class Dog {
    public function wagTail():void { stuff }
    override public function run():void {
        super.run();
        wagTail();
    }
}

如果这是一个很小的更改,您可以选择将行为交给父类,并使用成员变量稍微修改它:

代码语言:javascript
运行
复制
class Animal {
    protected var walkSpeed:Number;
    public function walk():void {
        x += walkSpeed;
    }
}
class Dog {
    public function Dog() {
        walkSpeed = 6;
    }
}

就我个人而言,我从未发现接口在AS3中非常有用--每次我尝试使用它们时,当我意识到我希望在实现之间共享功能时,我最终会将它们重构为类。

票数 1
EN

Stack Overflow用户

发布于 2011-02-21 22:14:38

我认为接口为使用多态性提供了更多的好处。如动物接口

代码语言:javascript
运行
复制
public interface Animal{
     function eat();
}

public class DogA implements Dog implements Animal{
   public eat(){ ... }
}

public class CatA implements Cat implements Animal{
   public eat(){ ... }
}

public class Main{

   public function getAnimal(a1:Animal){  // so you can pass in different animals
       if(a1 is Dog){
          ... do this
       }else if(a1 is Cat){
          ... do this
       }
   }

}

但从这个意义上讲,这就是为什么界面有时更好的原因

票数 1
EN

Stack Overflow用户

发布于 2010-10-06 22:43:46

As3支持接口,尝试为哺乳动物创建接口

代码语言:javascript
运行
复制
package com.you.interfaces
{
public interface Mammal
{

    //--------------------------------------
    //  PUBLIC METHODS
    //--------------------------------------
    function eat():void;
    function move(speed:uint = 0):void;
    function sleep():void;

    //--------------------------------------
    //  GETTER/SETTERS
    //--------------------------------------
    function get health():uint;
    function set health(value:uint):void;
}
}

在哺乳动物项目中:

代码语言:javascript
运行
复制
package com.you.animals
{
import com.philipbroadway.interfaces.Mammal;
import flash.display.Sprite;

public class Dog extends Sprite implements Mammal
{
    //--------------------------------------
    //  CONSTRUCTOR
    //--------------------------------------
    public function Dog()
    {
        super();
    }

    //--------------------------------------
    //  PRIVATE VARIABLES
    //--------------------------------------
    private var _hp:uint;
            private var _moveSpeed:uint;

    //--------------------------------------
    //  GETTER/SETTERS
    //--------------------------------------
    public function get health():uint
    {
        return 0;
    }

    public function set health(value:uint):void
    {
                   _hp = value;
    }
    //--------------------------------------
    //  PUBLIC METHODS
    //--------------------------------------
    public function eat():void
    {
                health++;
    }

    public function move(speed:uint=0):void
    {
                _moveSpeed++;
    }

    public function sleep():void
    {
                health++;
    }

}

}

任何其他动物都可以简单地实现哺乳动物类及其所有方法。如果你把它们保持得足够抽象,它们就应该在更多的动物中工作。这允许您操纵大量的动物,知道它们都有一组期望相同参数的公共方法,而不需要通过子类来创建继承噩梦。

希望这能有所帮助。-philip

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3877381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档