4

Javaで次のようなScalaコードを開発する方法がわかりません。

public abstract class A {
   protected A() { ... }
   protected A(int a) { ... }
}

public abstract class B {
   protected B() { super(); }
   protected B(int a) { super(a); }
}

public class C extends B {
   public C() { super(3); }
}

Cクラスの開発方法は明らかですが、Bの受け方がわかりません。助けてください。

PS私はJavaの一般的な方法であるウィケットWebページから派生した独自のBaseWebPageを作成しようとしています

4

1 に答える 1

7

次のような意味ですか?

abstract class A protected (val slot: Int) {
    protected def this() = this(0)
}

abstract class B protected (value: Int) extends A(value) {
    protected def this() = this(0)
}

class C extends B(3) {
}

AFAIKには、セカンダリフォームの1つからプライマリコンストラクタをバイパスする方法はありません。つまり、次の機能は機能しません。

abstract class B protected (value: Int) extends A(value) {
    protected def this() = super()
}

すべてのセカンダリコンストラクタフォームは、プライマリフォームを呼び出す必要があります。言語仕様(5.3.1コンストラクター定義)から:

クラスには、プライマリコンストラクター以外に追加のコンストラクターが含まれる場合があります。これらは、def this(ps1)...(psn)=eの形式のコンストラクター定義によって定義されます。このような定義により、包含クラスに追加のコンストラクターが導入されます。パラメーターは、仮パラメーターリストps1、...、psnで指定され、その評価はコンストラクター式eによって定義されます。各仮パラメーターのスコープは、後続のパラメーターセクションとコンストラクター式eです。コンストラクター式は、自己コンストラクター呼び出しthis(args1)...(argsn)か、自己コンストラクター呼び出しで始まるブロックのいずれかです。

(私の強調)。

于 2013-03-25T19:31:26.500 に答える