[英]Dart: inheritance and super constructor
我的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
...
这是因为SigninView尚未实现AbstractView的所有成员。 与你的问题相同的情况: Dart继承和超级构造函数
您没有扩展AbstractView,而是实现它。 这意味着您必须为AbstractPresenter presenter
者实现getter / setter。 如果仅实现该类,则不会继承属性。
从Dart语言规范 :
类不会从其超接口继承成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.