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

スーパーはのコンストラクターを実行Cclassし、同じことを再度実行しますが、「super(a、words)」なしで実行しようとすると、理解できるように機能しません。私の質問は、のコンストラクターを実行せずに、Dclassのみを表示する方法です。この出力を取得したい:trace(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 に答える