2009-07-01 54 views
2
鑄造作爲子類

我在ActionScript以下類:在Actionscript中

public class A { 
} 

public class B extends A { 
} 

和這些變量(在其他類):

public var InstanceOfA:A; 
public var InstanceOfB:B; 

如何蒙上了作爲一個實例B類?

我想:

InstanceOfA = new A(); 
InstanceOfB = InstanceOfA as B; 
trace(InstanceOfB); 

我得到InstanceOfB A型的對象。

我也試過:

instanceOfB = B(InstanceOfA); 

在這種情況下,我得到一個 '失敗的類型強制' 的錯誤。

回答

7

擁有鑄造,你只能從多到少的特定施放。由於B擴展了A,它理論上會包含更多類A不包含的特定代碼。正因爲如此,有可能投B,爲(因爲B是A),但你不能投了爲B,因爲A不是B.

要提出,在一個可能更合乎邏輯的方式,說A類是「動物」,B類是「狗」。狗是動物的更具體的實現。

狗是動物,所以你可以施放狗的動物,但是你不能把一個動物,並投它作爲一個狗,因爲不是每個動物是狗。

希望是有道理的。現在,如果你想做類似上面的事情,你既可以讓A和B擴展一個Abstract基類,也可以實現一個接口,並將兩個實例變量都作爲抽象類或接口。

3

除了Alex Jillard的回答:如果instanceofA中的值已經是B類型,則可以將A類型的變量投射到B

所以,如果你有

var instanceOfA:A = new B(); 

那麼這將工作:

instanceOfB = instanceOfA as B; 

處理事件時,這出現。該currentTarget財產上MouseEvent被聲明爲Object類型,但在運行時,它很可能是一個SpriteMovieClip