我正在尝试定义一个抽象的父类Event
和一个具体的孩子PlaceChangeEvent
:
abstract class Event {
String name;
DateTime occurredAt;
int handleCount;
Event(this.name, this.occurredAt, [this.handleCount = 0]);
}
class PlaceChangeEvent implements Event {
Place place;
PlaceChangeEvent(Place place) : super(place.name, DateTime.now());
}
PlaceChangeEvent
给了我2个编译器警告:
Missing inherited members: 'Event.name', 'Event.handleCount' and 'Event.occurredAt'
super
:0 positional arguments expected, but 2 found
我哪里出错了,我该怎么做才能解决这个问题?我的意图是:
name
对父级place.name
进行硬编码;和occurredAt
属性进行硬编码;和handleCount
属性初始化为0。答案 0 :(得分:3)
您可能希望从Event
课程扩展而不是实施它:
class PlaceChangeEvent extends Event {
实现意味着,您的类实现了类的接口,但是没有继承其成员,您需要自己实现它们。您收到有关超级构造函数的警告,因为您仍然从Object
而不是Event
延伸而Object
没有带有两个参数的构造函数。
答案 1 :(得分:2)
在这种情况下,您实现的是您的类而不是扩展它。您的类的实现意味着您的子类必须提供相应的方法。实现意味着您的具体类应该具有这些属性的getter和setter(或者只是自己定义这些属性)。它实际上不会继承类中定义的那些因为你没有扩展Event
类
答案 2 :(得分:0)
我知道这个问题很老,并且答案很好,应该被接受。所以,这里有一个关于implements
和extends
之间差异的示例:
import 'dart:math';
abstract class Shape {
num get area;
@override String toString() => 'Area is ${this.area}';
}
class Square extends Shape {
final num side;
Square({this.side: 2});
num get area => this.side * this.side;
}
class Circle implements Shape {
final num radius;
Circle(this.radius);
num get area => PI * pow(radius, 2);
}
void main() {
print(new Square());
print(new Circle(4));
}
当你运行它时:
dart "./dart-tut/shape.dart"
Area is 4
Instance of 'Circle'