【问题标题】:"extends" versus "implements" versus "with"“扩展”与“实现”与“与”
【发布时间】:2019-03-22 08:42:00
【问题描述】:

我想了解extendsimplementswith 之间的区别。我什么时候使用每个关键字?

【问题讨论】:

    标签: dart


    【解决方案1】:

    Extends:

    使用extends创建子类,使用super引用超类。

    Extends 是典型的OOP 类继承。如果类 a 扩展类 bb 中实现的所有属性、变量、函数在类 a 中也可用.此外,您可以覆盖函数等。

    如果你想创建一个更具体的类版本,你可以使用extend。例如 car 类可以扩展 vehicle 类。在 Dart 中,一个类只能扩展一个类。


    Implements:

    每个类都隐式定义了一个接口,该接口包含该类的所有实例成员以及它实现的任何接口。如果你想创建一个类 A 支持 B 类的 API 而不继承 B 的实现,那么 A 类应该实现 B 接口。

    Implements 如果您想创建自己的另一个类或接口的实现,可以使用。当类 a 实现类 b 时。 b 类中定义的所有函数都必须实现。

    当您实现另一个类时,您不会从该类继承代码。你只继承类型。在 Dart 中,您可以将 implements 关键字用于多个类或接口。


    With (Mixins):

    混合是一种在多个类层次结构中重用类代码的方法。

    With 用于包含 Mixins。 mixin 是一种不同类型的结构,它只能与关键字with 一起使用。

    它们在 Flutter 中用于包含通用代码 sn-ps。一个常用的 Mixin 是SingleTickerProviderStateMixin

    【讨论】:

    • 那么,extends 不能用于多重继承?您能否解释一下“每个类都隐含地定义了一个接口,该接口包含该类的所有实例成员及其实现的任何接口”?如果我扩展 SingleTickerProviderStateMixin 会发生什么。而不是使用 with?
    • 在其他编程语言中,不能implement类,只能implement接口。接口只包含函数和变量定义,但没有实现。在Dart 中,每个类都自动有一个接口,其中包括所有定义。因此,您也可以将implements 与类一起使用。
    • 是的,extends 只能用于单个类。
    • “每个类都自动有一个接口”——所以当我从另一个类实现它时,一个类中的所有实现都会被忽略?
    • @Niklas 如果我将with 关键字用于类而不是mixin 会发生什么?编译器不会抱怨。
    【解决方案2】:

    extend 当时只能与单个类一起使用,但是...您可以轻松扩展一个扩展另一个类的类,该类扩展另一个类...! ;)

    事实上,大多数 Flutter 小部件已经是这样构建的。

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2018-12-23
      • 2013-04-18
      • 2016-06-29
      • 2020-04-06
      • 2020-12-11
      • 1970-01-01
      • 2020-12-25
      相关资源
      最近更新 更多