Flutter中使用@override的目的是什么?

时间:2018-07-07 14:39:40

标签: dart flutter

在Flutter文档中,类中经常使用关键字@override。我试图搜索含义,但仍然无法理解。此@override关键字的目的是什么。

注意: 我来自JavaScript背景。

4 个答案:

答案 0 :(得分:13)

@override只是指出该函数也是在祖先类中定义的,但是正在被重新定义以在当前类中执行其他操作。它还用于注释抽象方法的实现。它是可选的,但建议使用,因为它可以提高可读性。

  

注解@override将实例成员标记为覆盖具有相同名称的超类成员。

https://api.dartlang.org/stable/1.24.3/dart-core/override-constant.html

JavaScript还支持@override作为注释,但必须在注释中。 http://usejsdoc.org/tags-override.html

答案 1 :(得分:0)

注解@override将实例成员标记为覆盖具有相同名称的超类成员。

注释适用于实例方法,getter和setter以及实例字段,这意味着该字段的隐式getter和setter被标记为覆盖,但字段本身未标记。

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

编辑器或面向程序员的类似工具可能会报告类是否从超类或接口继承了带注释成员的声明。

明智地使用@override注释,并且仅用于超类不受程序员控制,超类位于其他库或包中且不被视为稳定的方法。无论如何,使用@override是可选的。

例如,Dart平台库中故意不使用注释,因为它们仅依赖于它们自己。

取自https://docs.flutter.io/flutter/dart-core/override-constant.html

答案 2 :(得分:0)

这些术语到底是什么意思?继承是类从超类(以及从超类的超类,等等)继承属性和方法的能力。多态性在Dart中以@override元标记为例。有了它,子类对继承行为的实现可以专门化以适合其更具体的子类型。当一个类的属性本身就是其他类的实例时,它就使用合成来增加其能力。

Flutter中的继承和多态性

全部用开源Dart编写的Flutter UI框架中充满了继承和多态的示例。实际上,构建Flutter应用程序的许多标准模式都依赖于以下概念:

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

这是Flutter中最简单的自定义小部件示例。请注意,它使用extends关键字指示该类应继承自StatelessWidget的属性和方法,后者本身是从Widget类继承的。这很重要,因为每个Flutter小部件都有一个build()方法可用,该方法返回Widget的实例。 @override元标记可帮助您识别子类中被重写(替换)的继承方法或变量。

有关更多信息,请参见:https://dart.academy/inheritance-polymorphism-and-composition-in-dart-and-flutter/

答案 3 :(得分:0)

@override 修饰符关键字与 C# 编程语言中的关键字非常相似,因为它表示类的成员(即子类)正在覆盖并重新定义基类(即父类)中的相应成员。所以在颤动...

@override
Widget build(BuildContext context) {...}

...构建类在自定义构建小部件中重新定义。