2

为了解释我的问题,我写了一些代码。

这是超类:

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 运行 the 的构造函数Cclass并再次执行相同的操作,但是如果我尝试在没有“super(a, words)”的情况下运行它,它就不起作用,这是可以理解的。我的问题是如何Dclasstrace(a, words);不运行Cclass. 我想得到这个输出:

i am:5  years old and i will:kill  you
6 strangle
4

2 回答 2

1

当扩展一个类时,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')
于 2013-01-11T19:41:58.937 回答
1

超级构造函数总是在 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');
于 2013-01-11T19:42:02.153 回答