为什么@override注释是可选的

  • 本文关键字:注释 @override dart
  • 更新时间 :
  • 英文 :


我理解@override注释的定义。

但是,为什么注释的使用是可选的?

从文档中:

@override表示法的目的是捕获超类重命名成员的情况,并且用于覆盖成员的独立子类可以使用超类实现静默地继续工作。

您可能希望将方法命名为等于超类,而不显式重写它。这是允许的,因为它不会破坏任何约束。基本上,您可以随心所欲地命名方法。

@Override只强制要求您的父母之一必须具有具有相同签名的方法。

注释不是语言的一部分,因为语言设计者不想强制使用它。

已作为可选注释添加给需要该功能的用户,但它仅由分析器工具识别,它实际上不是语言的一部分。

您可以启用 linter 规则来强制执行它

  • http://dart-lang.github.io/linter/lints/annotate_overrides.html

通过在包含此内容的pubspec.yaml文件之外向项目添加.analysis_options文件

linter:
  rules:
    - annotate_overrides

因为方法的名称是在继承链中查找的:例如,让我们看一下这个继承链:

A
|
B
|
C

如果我们使用类 C 创建一个实例并调用方法 test(),那么首先在类 C 的主体中查看 test 的定义,然后是类 B,然后是类 A。因此,自动暗示了覆盖效果。效果与C++观察到的效果相似,有关详细阅读,请查看此链接:
https://isocpp.org/wiki/faq/strange-inheritance#hiding-rule


注释存在的原因在上面由Abaddon666明确说明。