我在ActionScript中有以下类:
public class A { } public class B extends A { }
和这些变量(在另一个类中):
public var InstanceOfA:A; public var InstanceOfB:B;
如何将A的实例转换为B类?
我试过了:
InstanceOfA = new A(); InstanceOfB = InstanceOfA as B; trace(InstanceOfB);
我为InstanceOfB得到了一个A类型的对象.
我也尝试过:
instanceOfB = B(InstanceOfA);
在这种情况下,我收到'Type Coercion Failed'错误.
使用铸造,您只能从更多特定的铸造.由于B扩展了A,理论上它将包含A类不包含的更具体的代码.因此,可以将B转换为A(因为B是A),但是你不能将A转换为B,因为A不是B.
用一种可能更合乎逻辑的方式来说,比如说A类是"动物"而B类是"狗".Dog是Animal的更具体的实现.
狗是一种动物,所以你可以把狗当作动物,但是你不能把动物当作狗来施展,因为不是每只动物都是狗.
希望有道理.
现在,如果您想要执行上述操作,可以让A和B都扩展Abstract基类,或者实现一个接口并将两个实例变量键入为抽象类或接口.