【问题标题】:the same properties for different classes不同类的相同属性
【发布时间】:2013-11-21 14:01:19
【问题描述】:

我可以为不同的类赋予相同的属性吗?

例如两个扩展 Sprite 和 MovieClip 的类,它们都具有 OasicObj 属性。

这有可能吗?

.

public class BasicObj
    {
        public var _id:uint;
        public var _type:String;
        public function SetType(type:String):void {
            _type = type;
        }
    }

public class ObjOne extends Sprite implements BasicObj
    {
        public function ObjOne():void {
            super();
        }
    }

public class ObjTwo extends MovieClip implements BasicObj
    {
        public function ObjTwo():void {
            super();
        }
    }

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    您说的是界面。将 BasicObj 设置为接口(将其放在自己的 .as 文件中,并将 'class' 替换为 'interface')。接口只包含函数的定义;即函数名称及其参数签名。这些函数在任何实现该接口的类中实现。
    接口是 AS3 实现多重继承的方式。他们还严格执行封装。

    【讨论】:

    • 带接口的代码只是举例。主要问题是“扩展 Sprite 和 MovieClip 的两个类,并且都具有 OasicObj 属性”
    • 你可以有一个扩展 Sprite 的类和一个不同的扩展 MovieClip 的类,它们可以有相似(或相同)的属性,但你最终可能不得不编写一些相当笨重的代码;如果你想使用它们的属性和方法,就好像它们是可互换的,你可能必须编写很多条件来检查它们是哪种“类型”——扩展 Sprite 或扩展 MovieClip。你最好实现 BasicObj 接口;然后对象也将属于“类型”BasicObj,因此您可以这样实例化它们。
    【解决方案2】:

    没有什么能阻止您向子类声明某种类型的属性。

    public class A extends MovieClip {
        public var bo:BasicObj;
        public function A() { 
            super();
        }
    }
    public class B extends Sprite {
        public var bo:BasicObj;
        public function B() {
            super();
        }
    }
    

    然后你照常引用这些属性。

    var a:A=new A();
    a.bo=new BasicObj();
    a.bo.SetType("A");
    

    【讨论】:

      【解决方案3】:

      你可以实现这样的接口

      public interface  BasicObj
      {
      
          function set type(value:String):void;
          function get type():String
      }
      
      public class ObjOne extends Sprite implements BasicObj
      {
          public function ObjOne():void {
              super();
          }
      
          private var _type:String;
      
          public function set type(value:String):void {
              this._type = value;
          }
      
      
          public function get type():String {
               return this._type;
          }
      
      }
      
      public class ObjTwo extends Sprite implements BasicObj
      {
          public function ObjTwo ():void {
              super();
          }
      
          private var _type:String;
      
          public function set type(value:String):void {
              this._type = value;
          }
      
      
          public function get type():String {
               return this._type;
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-03
        • 2017-02-19
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 2018-03-03
        • 2021-07-24
        • 1970-01-01
        相关资源
        最近更新 更多