[英]Dart / Flutter - class doesn't have to implement abstract class's abstract methods?
在 Flutter 我們有 class
abstract class PreferredSizeWidget implements Widget {
Size get preferredSize;
}
和
@immutable
abstract class Widget extends DiagnosticableTree {
const Widget({ this.key });
final Key? key;
@protected
@factory
Element createElement();
@override
String toStringShort() {
final String type = objectRuntimeType(this, 'Widget');
return key == null ? type : '$type-$key';
}
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.defaultDiagnosticsTreeStyle = DiagnosticsTreeStyle.dense;
}
@override
@nonVirtual
bool operator ==(Object other) => super == other;
@override
@nonVirtual
int get hashCode => super.hashCode;
static bool canUpdate(Widget oldWidget, Widget newWidget) {
return oldWidget.runtimeType == newWidget.runtimeType
&& oldWidget.key == newWidget.key;
}
static int _debugConcreteSubtype(Widget widget) {
return widget is StatefulWidget ? 1 :
widget is StatelessWidget ? 2 :
0;
}
}
我的問題是:為什么如果我們混合使用 PreferredSizeWidget class 我們不必實現所有抽象 class 小部件方法和抽象方法?
我試圖模擬一些代碼
class A implements B {}
abstract class B extends C {}
abstract class C {
void test() {
print("test");
}
}
並得到錯誤
Error: The non-abstract class 'A' is missing implementations for these members:
- C.test
class A implements B {
^
lib/main.dart:16:8:
我自己沒有運行它,但在你的情況下,A 不再是抽象的,所以它必須實現所有東西,在 PreferredSizeWidget 的情況下 - 你通常在一個小部件上擴展/實現/混合它(它已經實現了小部件的所有內容)因此只給你留下了preferredSize
@Norbert515的回答。
要點是即使我們混合/擴展 PreferredSizeWidget 我們實際上實現了所有 Widget 方法,但是由於我們通常在 Widget 上混合它,我們不必隱式覆蓋這些方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.