了解Dart中的'implements'和'with'关键字

8
我正在阅读Dart语言规范并探索一种新的有趣语言。正如Dart语言规范所说:Dart具有隐式接口。这意味着每个类也是一个接口。因此,如果我想实现另一个类的某些行为,只需要使用“implements”子句。
此外,Dart支持混入。因此,我们可以使用“with”关键字从另一个类中获取方法的实现。
因此,假设抽象类A定义了方法a():
abstract class A {
  void a();
}

另外两个具体的类B定义了方法a(),但没有实现类A,如下所示:

class B {
  void a() {
    print("I am class B");
  }
}

类C实现了类A,同时使用Mixin B,示例如下:

class C extends Object with B implements A {
   ...
}

这里,我有几个关于它的问题。如果一个类实现了接口并使用混入,而混入具有与方法名称相同的方法实现; 那么它不会使得成为可能吗? C类的行为将是什么? 它需要实现或者它将由隐式实现吗?
我刚开始学习Dart和诸如混入之类的概念对我来说非常陌生。 有人可以通过回答我的问题来帮助我理解吗?

1
希望你不介意,我已经修正了你的示例代码,使其正确无误。Dart - Argenti Apparatus
@ArgentiApparatus,如果我使用带有with子句的mixin,那么这个类是否被限制只能扩展Object类?我在某处看到过这样的说法,但是没有理解。你能否详细说明一下你的编辑内容? - Krupal Shah
2
你写的代码是 class C implements A with B { ...},正确的语法应该是 class Classname extends Baseclass with Mixinclass implements Interface{...}。任何类都可以被继承,但作为混入类的类有一些限制。我建议阅读语言指南中关于类的部分以便更好地理解。 - Argenti Apparatus
2个回答

4
混入是一种有限的多重继承。使用 C with BC 继承了 void a() 的实现。添加 implements A 不需要进行任何其他操作,因为 C 已经通过 B 实现了它所声称要实现的合同。B

2
您的链接是指“Language Tour”,而不是规范,但是这个“Tour”绝对是您应该开始阅读的。
您的示例很好。 class C extends Object with B { ... } 基本上将B的成员添加到Object中以创建C。如果C随后满足接口A,则可以声明支持该接口(implements A)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接