我想在颤振中使用一些部分类,但不知怎么的,它不适用于已实现的抽象类。我举一个例子
my_interface.dart
abstract class MyInterface {
void method1();
void method2();
}my_parent.dart
import 'package:XYZ/core/init/network/firebase/my_interface.dart';
part 'my_child.dart';
class MyParent implements MyInterface {
MyParent();
@override
void method1() {}
}my_child.dart
part of 'my_parent.dart';
class MyChild extends MyParent {
_MyChild() : super();
@override
void method2() {}
}如您所见,我的抽象类有两个方法,我希望在我的父类中编写method1的主体,在我的子类中编写method2的主体。
然后,当我调用这些方法时,我应该能够按如下方式调用
MyParent().method1();
MyParent().method2();用飞镖就能做到吗?
发布于 2021-08-02 11:47:13
从这一点判断:
MyParent().method1();
MyParent().method2();看起来,您特别希望使用MyParent的一个实例来调用子类MyChild中仅为@override的方法。这不可能有很好的理由。您可能有多个继承自MyParent的类,例如MyChild2和MyChild3,因此如果您可以在MyChild中追溯重写MyParent,那么它不仅会更改MyChild和MyParent,还会更改MyChild2和MyChild3。这将给每个人带来重大问题。@override的要点是,您可以在子类中更改一个方法,而不需要在超类中更改它。而且,为了让MyParent继承MyChild,必须已经定义了它,所以如果MyParent依赖于MyChild来实现method2,那么您不会遇到一个悖论吗?
如果您想使用MyParent调用运行时不知道的函数,那么只需给MyParent一个回调字段,并在准备就绪时提供它。或者,您可以创建一个实现mixin并使用class MyParent extends MyInterface with MyMixin的class MyParent extends MyInterface with MyMixin。
另外,如果没有为abstract类中的方法提供具体实现,那么必须在每个子类中这样做。这意味着您无论如何都需要在@override method2中使用MyParent,或者在MyInterface中定义它。看这里
发布于 2021-08-03 07:59:10
我应该可以按以下方式打电话 MyParent().method1();MyParent().method2();
有两个问题:
MyParent不是一个有效的类。因为它不是abstract,所以它必须是可构造的,因此它的所有继承方法都必须有来自某处的实现。MyParent().method2()没有意义。MyParent只实现method1。你希望MyParent().method2()做什么?其执行工作应从何而来?如果希望MyParent只部分实现MyInterface,则可以:
MyParent也是abstract。MyChild而不是MyParent。MyParent提供一个构造并返回factory实例的factory构造函数(或static方法)。https://stackoverflow.com/questions/68619608
复制相似问题