2016-08-15 96 views
2

我刚刚阅读了Dart语言规范并探索了一种新的有趣的语言。 As Dart language specification says:飞镖有implicit interfaces。这意味着每个class也是interface。所以,如果我想实现另一个类的某些行为,implements子句是我唯一需要的。飞镖中理解'实现'和'与'

另外,Dart支持mixins。这样我们就可以使用with关键字从另一个类实现方法。

因此,考虑到如果一个抽象类A定义的方法A(),如:

abstract class A { 
    void a(); 
} 

和另外两个具体类B定义方法的(),但不实现类A等:

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

类和C类实现A类与密新b类似:

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

在这里,我有几个questio恩关于它。如果一个类实现了接口,并且使用具有相同方法名的方法实现的mixin;这不会使cycling inheritance成为可能吗? class C会怎样?它是否需要执行a()或者它将由mixin B隐含实施?

我只是学习飞镖和像mixin这样的概念对我来说很陌生。任何人都可以通过回答我的问题来帮助我理解吗?

+0

希望你不介意,但修正你的样本是否正确Dart –

+0

@ArgentiApparatus那么,如果我使用mixin使用with子句是那个类限制扩展Object?我在某处读过它,但没有明白。你能否详细说明一下你的编辑? –

+0

您编写了'class C implements B with B {...}'正确的语法是'class Classname extends Mixinclass implements Interface {...}'扩展Baseclass。 *任何*课程可能会延长。虽然可以用作mixin的类有一些限制。我建议阅读关于课程的语言游览部分以便更好地理解 –

回答

1

Mixins是一种有限的多重继承。通过C with BC继承了void a()的实现。增加implements A不需要做任何事情,因为C已履行合同它声称履行implements A,因为B

2

您的链接是语言导览,而不是specification,但巡回演唱会绝对是你应该阅读的开始。

你的例子很好。 class C extends Object with B { ... }基本上将B的成员添加到Object以创建C.如果C满足接口A,则它可以声明对该接口的支持(implements A)。