inheritance - Dart:继承和 super 构造函数

标签 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...
}

这个想法是定义“ View ”和“演示者”的层次结构,其中最终是 DefaultSigninView将与 DefaultSigninPresenter 相关(双向) .

但我在 DefaultSigninView 中收到编译器警告的构造函数,提示我对 super(presenter) 的调用:

Missing inherited member 'AbstractView.presenter'



为什么它不能“看到”我正在传递的演示者?父构造函数 ( AbstractView ) 采用 AbstractPresenter ...

最佳答案

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

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

来自 Dart language spec :

A class does not inherit members from its superinterfaces.

关于inheritance - Dart:继承和 super 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20885176/

相关文章:

c# - Winforms MVP 网格事件问题

javascript - 如何从 JavaScript 中的子类调用父类的方法,以便可以访问父类的局部变量?

python - 如何在初始化时动态继承?

flutter - Flutter 中的 ListView 和 SingleChildScrollView 有什么区别?

c# - 使用 MVP 插入相关实体

iOS MVP 数据转换责任

php - 接口(interface)可以扩展其他类吗?

java - 使用影响 super 构造函数的变量调用子类构造函数

dart - 我如何分析我的项目发布依存关系

android - 如何更改 WiFi 热点名称并在 Flutter 中执行 Wifi 扫描?