您的位置:首页 > 移动开发

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

2009-12-10 02:03 225 查看
今天突发奇想,本来想试着直接在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中只能重写实例方法,不能重写实例属性):

public override function addChild(child:DisplayObject):DisplayObject

虽然参数child的类型是DisplayObject,但是它必须实现IUIComponent接口(所有Flex组件都实现了这一接口),才能添加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: