Dart:继承和超级构造函数

时间:2014-01-02 14:31:41

标签: inheritance dart mvp multiple-inheritance super

我的Dart应用程序具有以下类层次结构:

abstract class AbstractPresenter {
    AbstractView view;

    AbstractPresenter(this.view);

    void start(EventBus eventBus) {
        view.presenter = this;
        querySelector("body").innerHTML = view.render();
    }
}

abstract class SigninPresenter implements AbstractPresenter {
    void onSignin(MouseEvent mouseEvent);
}

class DefaultSigninPresenter implements SigninPresenter {
    // Lots of code
}

abstract class AbstractView {
    AbstractPresenter presenter;

    AbstractView(this.presenter);

    String render();

    void bindUI(String html);
}

abstract class SigninView implements AbstractView {
    SigninView(AbstractPresenter presenter) : super(presenter);

    LabelElement getSigninLabel();

    void setSigninLabel(LabelElement signinLabel);

    InputElement getEmailTextField();

    void setEmailTextField(InputElement emailTextField);
}

class DefaultSigninView implements SigninView {
    LabelElement signinLabel;
    InputElement emailTextField;

    DefaultSigninView(SigninPresenter presenter) : super(presenter);

    // Lots of code...
}

我们的想法是定义“观看次数”和“演示者”的层次结构,最终DefaultSigninView将与DefaultSigninPresenter相关(双向)。

但我在DefaultSigninView的构造函数中收到编译器警告,抱怨我打电话给super(presenter)

  

缺少继承的成员'AbstractView.presenter'

为什么不能“看到”我传递的主持人呢?父构造函数(AbstractView)采用AbstractPresenter ...

1 个答案:

答案 0 :(得分:2)

这是因为SigninView尚未实现AbstractView的所有成员。与您的问题相同的情况:Dart inheritance and super constructor

您没有扩展AbstractView,而是实现它。这意味着您必须为AbstractPresenter presenter实现getter / setter。如果只实现该类,则不会继承属性。

来自Dart language spec

  

类不会从其超接口继承成员。