Actionscript 3 重写扩展类的构造函数时出错
我在AS3上两次课时发现了一个非常奇怪的问题。让我们称它们为Actionscript 3 重写扩展类的构造函数时出错,actionscript-3,flash,class,overriding,flash-cs6,Actionscript 3,Flash,Class,Overriding,Flash Cs6,我在AS3上两次课时发现了一个非常奇怪的问题。让我们称它们为ParentClass和ChildClass。为了使这两个对象都可用,您需要一个Sprite对象,然后ParentClass使其在stage中可见子类也继承了父类 ParentClass.as: package myStudio.basic { import flash.display.MovieClip; import flash.display.Sprite; public dynamic class Par
ParentClass
和ChildClass
。为了使这两个对象都可用,您需要一个Sprite
对象,然后ParentClass
使其在stage中可见<代码>子类也继承了父类
ParentClass.as:
package myStudio.basic {
import flash.display.MovieClip;
import flash.display.Sprite;
public dynamic class ParentClass extends MovieClip {
public function ParentClass(mc:Sprite=null) {
addChild(mc);
}
}
}
ChildClass.as:
package myStudio.containers {
import myStudio.basic.ParentClass;
import flash.display.MovieClip;
import flash.display.Sprite;
public class ChildClass extends ParentClass {
public function ChildClass(mc:Sprite=null) {
addChild(mc);
}
}
}
然后,我在第1帧,FLA文件的层动作上写下这段代码:
var mc:MovieClip = new childMC;
var vig:ChildClass = new ChildClass(mc);
addChild(vig);
但是,我得到了运行时错误#2007:
我试图重写ChildClass
构造函数,但它仍然不起作用。
所以我的问题是:还有其他解决方法吗?原因是您没有呼叫super。您可以检查错误堆栈中发生的情况(从下到上):
null
作为子项添加。但由于构造函数是在内部调用的,因此没有传递给它的参数。所以mc
变量总是null
。但正如我们所说-null
无法添加
自己使用super:
public function ChildClass(mc:Sprite=null) {
super(mc);
}
这样,ParentClass
将获得对mc
对象的引用,并能够添加它
另一个选项是不在父类中使用addChild
,而只在子类中使用。那么,你是否将任何东西传递给super,或者你是否正在调用super,都无关紧要
编辑:我忘了说这不是一个bug,而是一个标准行为,它的工作原理和它应该工作的完全一样。这样做的原因是每个类都可以对构造函数进行完全不同的重写。它可以接受更多或更少的参数,因此调用父构造函数的链是您要处理的工作
public function ChildClass(mc:Sprite=null) {
super(mc);
}