Actionscript 3 在子类AS3中使用super()
为了解释我的问题,我写了一些代码 这是超类:Actionscript 3 在子类AS3中使用super(),actionscript-3,Actionscript 3,为了解释我的问题,我写了一些代码 这是超类: package { public class Cclass { public function Cclass(a:int, words:String) { trace("i am:"+a," years old and i will:"+words," you"); } } } 这是子类: package { public class Dcla
package
{
public class Cclass
{
public function Cclass(a:int, words:String)
{
trace("i am:"+a," years old and i will:"+words," you");
}
}
}
这是子类:
package
{
public class Dclass extends Cclass
{
public function Dclass(a:int, words:String)
{
super(a, words);
trace(a, words);
}
}
}
当我测试它时,我得到以下输出:
i am:5 years old and i will:kill you
i am:6 years old and i will:strangle you
6 strangle
super运行Cclass
的构造函数并再次执行相同的操作,但是如果我尝试在没有“super(a,words)”的情况下运行它,它将无法工作,这是可以理解的。我的问题是如何使Dclass
只显示跟踪(a,单词)代码>而不运行Cclass
的构造函数。我希望获得以下输出:
i am:5 years old and i will:kill you
6 strangle
扩展类时,AS3运行时将自动调用基类构造函数。
因此,您可以假设,在扩展类时,无论您是否在中编写代码,super.constructor总是会发生。
这就是为什么最好不要在构造函数中包含任何代码。
这并不意味着一点按摩就不能修复它
public class Cclass{
public function Cclass( ){
}
public function doTrace( a:int, words:String):void{
trace("i am:"+a," years old and i will:"+words," you");
}
}
public class Dclass extends Cclass{
public function Dclass(){
//super();// this is implied that it will always happen
}
public function myTrace(a:int, words:String):void{
this.doTrace(a, words);
}
}
var dClass:Dclass = new Dclass()
dClass.myTrace(5,'kill')
超级构造函数总是在actionscript中运行,如果您不声明它,它将自动运行它。实现这一点的最佳方法是将其设置为函数
public class cc {
public function doSomething(a:int, words:String)
{
trace("i am:"+a," years old and i will:"+words," you");
}
}
public class dd extends cc {
override public function doSomething(a:int, words:String) {
trace("i am:"+a," years old and i will:"+words," you");
}
}
var d = new dd();
d.doSomething(5, 'kill');
我还是一个初学者,所以将构造函数留空真的是一个很好的实践吗?我以前从未读过。不过,谢谢你!