关于不能直接在flex Application 里addChild的解决方法

今天突发奇想,本来想试着直接在Application组件里添加一个MovieClip的:


http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
   
                    import mx.core.UIComponent;
            import flash.display.MovieClip
            private function init():void{
                //var ui:UIComponent = new UIComponent();
                var temp:MovieClip= new MovieClip()
                addChild(temp)
                //this.addChild(ui)
            }
        ]]>
   

运行报错,说什么无法将MovieClip转化为IUIComponent,一头雾水之时google了下发现还有人碰到和我一样的错误,用他提供的方法:也就是把这个影片剪辑装进一个UIComponent中,然后再添加这个UIComponent:

            private function init():void{
                var ui:UIComponent = new UIComponent();
                var temp:MovieClip= new MovieClip()
                ui.addChild(temp)
                this.addChild(ui)
            }

原因:

因为Application的addChild方法并非完全继承自DisplayObjectContainer,(

继承:意味着新类看起来和原来的类相似.新类拥有和原有类相同的对外接口,或许还增加了新的接口,使用原有类对象的地方都可以被替换为新类.符合这两个条件的才叫做正确的继承)

Application→LayoutContainer→Container→UIComponent→FlexSprite→Sprite→DisplayObjectContainer

而是在Container那里被重写(在子类中经常改变继承自父类的某个属性或方法的内容,但不改变名称,从而达到子类同名方法实现不同功能的多态效果,这种方式叫做重写,在AS3中只能重写实例方法,不能重写实例属性):

  1. public override function addChild(child:DisplayObject):DisplayObject

虽然参数child的类型是DisplayObject,但是它必须实现IUIComponent接口(所有Flex组件都实现了这一接口),才能添加。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值