我有一个抽象类,其中包含一些子类需要实现的抽象方法。
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中,您可以创建一个抽象方法来覆盖超类并强制子类具有自定义实现。有没有办法在达特身上强制这样做,就这一点而言,这是预期的行为吗?
你不能。请求在package:meta
中添加@mustOverride
注释(另请参阅https://github.com/dart-lang/sdk/issues/28250)。
抽象类中的空方法声明也应该不会从基类中隐藏默认实现。
你可以像一样
FutureOr<void> myFunction();
并且它将强制任何继承者覆盖它