我理解@override注释的定义。
但是,为什么注释的使用是可选的?
答案 0 :(得分:5)
@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