3

派生クラスの構築が基本クラスのコンストラクターへの呼び出しのみで構成される継承階層を実装しています。次に、基本クラスのコンストラクターは、派生クラスにのみ実装されているメソッドを呼び出します。

私は基本的な実装をしていますが、もちろん、DartEditor は基本クラスのメソッドが欠落していると文句を言います。どうすればそれを幸せにできますか?

編集:質問を投稿する前にまだコードを実行していませんでしたが、メソッドバインディングが期待どおりに機能することがわかりました:

void main() {
    new B();
}

abstract class A {
    A() {
        x();
        y();
    }
    x() => print('A.x');
    y() => print('A.y');
}

class B extends A {
    B() : super();

    @override
    x() => print('B.x');
}

上記のコードは、次のように出力します。これは望ましい動作です。BのコンストラクターはA、 を呼び出すコンストラクターを呼び出しますx()。しかし、 for がx()定義されているためB、これは次のように呼ばれるものです。

B.x
A.y

x()は のコンストラクターによって呼び出されていますがA、Dart は何らかの形でBのを呼び出すことを知っていることに注意してくださいx()。これは、呼び出しチェーンが大まかに次のようになっているためだと思います。

B() -> A() -> B::x()

実行時に、Dart は呼び出しチェーンを検査して、バインドするオブジェクトを決定しますx()

4

1 に答える 1