我有一个抽象类,它有一些子类需要实现的抽象方法。
abstract class BlockData {
Widget build();
BlockData get value;
}
class NumberData extends BlockData {
NumberData(Function updateCallback) : super(updateCallback);
// trying to remove either of the below methods throws a compiler error as expected
@override
BlockWidget build() {
// TODO: implement build
throw UnimplementedError();
}
@override
BlockData get value => this;
}
字符串
正如预期的那样,我的子类被迫实现它们。但是,我还想强制类实现自定义的==
和hashcode
方法。当我用抽象实现覆盖抽象类中的这些方法时,它们被完全忽略,子类被允许不实现它们。
abstract class BlockData {
Widget build();
BlockData get value;
@override
bool operator ==(other);
@override
int get hashCode;
}
// this should throw an error since it doesn't implement == or hashcode, but it doesn't
class NumberData extends BlockData {
NumberData(Function updateCallback) : super(updateCallback);
@override
BlockWidget build() {
// TODO: implement build
throw UnimplementedError();
}
@override
BlockData get value => this;
}
型
这与Java中的行为不同,在Java中,您可以创建一个抽象方法来覆盖超类,并强制子类具有自定义实现。有没有办法在Dart中强制执行此操作,以及这是否是预期的行为?
2条答案
按热度按时间utugiqy61#
你不能. There is a request for a
@mustOverride
annotation inpackage:meta
(也可以参见https://github.com/dart-lang/sdk/issues/28250)。它也期望the empty method declaration in the abstract class does not hide the default implementation from its base class。
kmbjn2e32#
你就可以像
字符串
它会强制任何继承者重写它。