https://dart.dev/guides/language/language-tour#implicit-interfaces
我已经看到了使用“实现”的代码,因此我正在研究“实现”。 但是我无法通过查看官方文档来分辨与扩展的区别。
看一下官方文档(上一页)中的示例代码,看起来它只是在用工具扩展来做。 然后我想知道它是否应该使用“扩展”。 我想到目前为止,我已经了解了继承(扩展)和混合(带有)。 Dart文档中也提到了“接口”一词,但是对“接口”有明确的定义。 我什至找不到它在哪里。 我对其他语言的界面了解不多,因此很难获得图像。
继承和实现之间到底有什么区别? 由于存在差异,何时使用继承“扩展”以及何时使用实现“实现”?
样品中是否有明显的区别?
答案 0 :(得分:2)
给出类MyClass
:
MyClass extends Foo
是经典继承。 MyClass
是Foo
MyClass implements Bar
声明实现者符合Bar
接口。 MyClass
看起来像Bar
MyClass with Batz
在界面和实现中“混合”。 MyClass
的行为就像Batz
。 MyClass
可以根据需要实现和混合许多接口(存在一些限制),但只能从一个接口扩展。
答案 1 :(得分:0)
除其他解释外,dart不允许开发人员使用多重继承,因此只能有一个扩展,但是可以有多个实现< / strong>。
因此,一个类只能是一个类的子类型(父类的父类除外),但是接口定义了实现该类的类的行为,并且一个类可以具有不同的行为。
一个简单的比喻是动物。如果我们假设动物有不同的行为,例如游泳界面(如ISwimmer),运行界面(如IRunner)和飞行界面(如IFlyer)。例如,鱼类是动物。这使得它扩展了Animal类。另外,Fish具有游泳的行为,因此它实现了ISwimmer接口。
答案 2 :(得分:0)
如果您只是想了解它们在概念上的不同之处,
您扩展了一个班级。当您扩展父亲或您的父亲是您的基层阶级时,请考虑一下。
您实现一个接口(它只是一个纯抽象类)。就像法拉利实现汽车一样。
接口不能有实例。例如-您看过任何CAR吗?答案是否定的,您已经看到了汽车的类型,例如福特,丰田实现了CAR,因此该汽车充当了其他公司或您可以说是class(Ferrari)实现的接口。
您必须实现汽车的所有功能才能称为汽车,这就是为什么需要实现接口的每种方法的原因,我们称x为“实现” y。
在扩展时,您可以覆盖某些内容并跳过其他内容,假设您的鼻子看起来像您的父亲,但您的耳朵却不然。
将接口视为骨架或只是一个空类。