Inheritance 在Actionscript中作为子类强制转换

Inheritance 在Actionscript中作为子类强制转换,inheritance,actionscript,oop,casting,Inheritance,Actionscript,Oop,Casting,我在ActionScript中有以下类: public class A { } public class B extends A { } 这些变量(在另一个类中): 如何将A的实例强制转换为B类 我试过: InstanceOfA = new A(); InstanceOfB = InstanceOfA as B; trace(InstanceOfB); 我为InstanceOfB获取了一个类型为A的对象 我还尝试: instanceOfB = B(InstanceOfA); 在本例中,

我在ActionScript中有以下类:

public class A {
}

public class B extends A {
}
这些变量(在另一个类中):

如何将A的实例强制转换为B类

我试过:

InstanceOfA = new A();
InstanceOfB = InstanceOfA as B; 
trace(InstanceOfB);
我为InstanceOfB获取了一个类型为A的对象

我还尝试:

instanceOfB = B(InstanceOfA);

在本例中,我得到一个“类型强制失败”错误

使用施法时,只能从更具体的角度施法。由于B扩展了A,理论上,它将包含类A不包含的更具体的代码。因此,可以将B强制转换为A(因为B是A),但不能将A强制转换为B,因为A不是B

用一种可能更符合逻辑的方式来说,比如说a类是“动物”,B类是“狗”。狗是动物的一个更具体的实现

狗是一种动物,所以你可以把狗当作动物来看待,但你不能把一只动物当作狗来看待,因为不是每一只动物都是狗

希望这是有道理的


现在,如果你想像上面那样做,你可以让A和B都扩展一个抽象基类,或者实现一个接口,并将两个实例变量都键入抽象类或接口。

Alex Jillard回答的补充:如果
instanceofA
中的值已经是
B
类型,则可以将
a
类型的变量强制转换为
B

所以如果你有

var instanceOfA:A = new B();
那么这就行了:

instanceOfB = instanceOfA as B;
这在处理事件时出现。
MouseEvent
上的
currentTarget
属性声明为类型
对象
,但在运行时它可能是
Sprite
MovieClip

instanceOfB = instanceOfA as B;