为什么@override注释是可选的?

时间:2016-07-12 17:31:18

标签: dart

我理解@override注释的定义。

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

4 个答案:

答案 0 :(得分:5)

来自documentation

  

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

您可能希望将方法命名为超类,而不是明确地覆盖它。这是允许的,因为它不会破坏任何约束。 基本上你可以随意命名你的方法。

@Override仅强制执行,即您的父母之一必须拥有相同签名的方法。

答案 1 :(得分:5)

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

它已被添加为需要该功能的人的可选注释,但它只能被分析工具识别,它实际上并不是该语言的一部分。

答案 2 :(得分:4)

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

.analysis_options文件中添加pubspec.yaml文件以及此内容

linter:
  rules:
    - annotate_overrides

答案 3 :(得分:1)

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

A
|
B
|
C

如果我们使用类C创建实例并调用方法test(),则首先在类C的主体中查找测试的定义,然后在类B的主体中查找,然后在类A的主体中查找。因此,自动隐含了覆盖效果。 效果类似于在C ++中观察到的效果,有关详细信息,请查看以下链接:
https://isocpp.org/wiki/faq/strange-inheritance#hiding-rule


上面由Abaddon666明确指出了存在注释的原因。