在 Java 中,可以在类中声明方法以防止子类覆盖它。
例如:
class Foo {
final void bar() {
// some code here.
}
}
Dart 中有类似的构造吗?
package:meta
提供了 @nonVirtual
注释 来禁止重写方法,并提供 @sealed
注释 来完全禁止派生类。
请注意,这些注释只是为 dartanalyzer
提供
提示。它们实际上不会阻止任何违反注释的行为,相反,它们会在执行分析时打印警告。
是的,Irn & Jamesdlin 答案的代码:
import 'package:meta/meta.dart';
class Foo {
@nonVirtual
void bar() {
print("bar from Foo!");
}
}
class SubFoo extends Foo {
@override
void bar() {
print("bar from SubFoo");
}
}
您会从分析器中收到如下警告:
成员“bar”在“Foo”中被声明为非虚拟,并且不能在子类中被覆盖。dart(invalid_override_of_non_virtual_member)