2013-11-21 125 views
0

我可以爲不同類別提供相同的屬性嗎?不同類別的相同屬性

例如擴展了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(); 
     } 
    } 

回答

0

您可以實現一個接口這樣

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; 
    } 

} 
1

你在談論一個接口。將BasicObj設置爲一個接口(放在它自己的.as文件中,用'interface'替換'class')。接口僅包含函數的定義;即函數名稱及其參數簽名。這些函數在實現接口的任何類中實現。
接口是AS3實現多重繼承的方式。他們也嚴格執行封裝。

+0

帶接口的代碼就是例子。主要問題是「擴展Sprite和MovieClip的兩個類,並且都具有OasicObj屬性」 – user3017844

+0

您可以有一個擴展Sprite的類和一個擴展MovieClip的不同類,它們可以具有相似(或相同)屬性,但是您可能最終不得不寫一些非常笨重的代碼;如果你想使用它們的屬性和方法,就好像它們是可互換的那樣,你可能不得不寫很多條件來檢查它們是哪一個「類型」 - 擴展的Sprite或擴展的MovieClip。實現BasicObj接口會更好;這些對象也將是「類型」BasicObj,因此您可以將它們實例化。 – moosefetcher

1

沒有什麼能阻止你聲明某種類型的屬性的子類。

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"); 
+0

以及這是最簡單的方法,謝謝) – user3017844