Flash 这意味着什么->;ClassA(obj作为MovieClip)或var var_a:ClassA=newsomeotherclass()

Flash 这意味着什么->;ClassA(obj作为MovieClip)或var var_a:ClassA=newsomeotherclass(),flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我真的对这些类型的陈述感到困惑: 这意味着什么: 铸造时: var xyz=ClassA(obj作为MovieClip) 声明/定义时: var xyz:ClassA=newsomeotherclass() 我的意思是,在上面相同的语句中如何使用两个不同的类?这可能是因为继承关系吗 谢谢 五, xyz被声明为具有ClassA类型,因此只有当某个其他类是ClassA的子类时,此赋值才会起作用。否则,将在编译时抛出错误 var xyz = ClassA( obj as MovieClip ) 该语

我真的对这些类型的陈述感到困惑:

这意味着什么:

  • 铸造时:

    var xyz=ClassA(obj作为MovieClip)

  • 声明/定义时:

    var xyz:ClassA=newsomeotherclass()

  • 我的意思是,在上面相同的语句中如何使用两个不同的类?这可能是因为继承关系吗

    谢谢 五,

    xyz被声明为具有ClassA类型,因此只有当某个其他类是ClassA的子类时,此赋值才会起作用。否则,将在编译时抛出错误

    var xyz = ClassA( obj as MovieClip )
    
    该语句的结果是双重转换:首先,将obj转换为MovieClip,然后转换为ClassA。如果这两种类型中的任何一种不在obj的类型层次结构中,则结果为
    null

    除非obj不是MovieClip(在这种情况下,尝试将
    null
    强制转换为ClassA将导致运行时出现null指针异常),否则不会出现错误,因为您可以将任何内容分配给xyz-未指定任何变量类型

    为什么我需要这样的东西?var xyz:ClassA=new SomeOtherClass(),当您继承一个具有ClassA类型变量的类,并且您继承的类需要使用它的子类型时。这种处理类型(虽然不是声明)的方法的一个众所周知的例子是
    DisplayObjectContainer.addChild(DisplayObject)
    ——您可以传入精灵、形状、MovieClip等——它们都继承DisplayObject,因此都可以添加到显示列表中。
    var xyz = ClassA( obj as MovieClip )