Gre*_*rad 6 oop interface class mixins dart
我已经玩过一点 Dart 3 并且是新类修饰符的粉丝。但我似乎无法理解:为什么interface class存在?我理解interface mixin,因为你可以声明抽象成员。但你不能用 来做到这一点interface class,至少在最新的 alpha 中是这样。
具体来说,你可以这样做:
interface mixin A {
void foo();
}
abstract class B {
void bar();
}
Run Code Online (Sandbox Code Playgroud)
但你不能这样做:
interface class C {
void foobar(); // compilation error: needs a concrete implementation
}
Run Code Online (Sandbox Code Playgroud)
interface class始终需要提供存根实现并稍后实现它们的意义何在?什么时候应该使用interface classover interface mixin?
但总结是,我同意你的观点,这就是为什么你应该使用而abstract interface不是仅仅使用interface. 仅当您希望能够实例化它时,才需要使用interfaceover 。abstract interface
它是什么:更像是一个传统的界面。只能实现(不能扩展)。但是您可以定义没有函数体的函数。
\n为什么你应该关心:你可以只定义 \xe2\x80\x9cshape\xe2\x80\x9d 而不定义任何功能。父类中\xe2\x80\x99s 没有任何隐藏内容。
\n// -- File a.dart\nabstract interface class AbstractInterfaceClass {\n String name = \'Dave\'; // Allowed\n void body() { print(\'body\'); } // Allowed\n \n // This is a more traditional implementation\n int get myField; // Allowed\n void noBody(); // Allowed\n}\n\n// -- File b.dart\n// Not allowed\nclass ExtensionClass extends AbstractInterfaceClass{}\n// Allowed\nclass ConcreteClass implements AbstractInterfaceClass {\n // Have to override everything\n @override\n String name = \'ConcreteName\';\n @override\n void body() { print(\'body\'); }\n\n @override\n int get myField => 5;\n @override\n void noBody() => print(\'concreteBody\');\n}\nRun Code Online (Sandbox Code Playgroud)\n// -- File a.dart\ninterface class InterfaceClass {\n String name = \'Dave\'; // Allowed\n void body() { print(\'body\'); } // Allowed\n\n int get myField; // Not allowed\n void noBody(); // Not allowed\n}\n\n// -- File b.dart\n// Not allowed\nclass ExtensionClass extends InterfaceClass{}\n// Allowed\nclass ConcreteClass implements InterfaceClass{\n // Have to override everything\n @override\n String name = \'ConcreteName\';\n @override\n void body() { print(\'body\'); }\n}\nRun Code Online (Sandbox Code Playgroud)\n