首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分割在Dart Flutter中实现抽象类的父类?

如何分割在Dart Flutter中实现抽象类的父类?
EN

Stack Overflow用户
提问于 2021-08-02 09:57:01
回答 2查看 548关注 0票数 1

我想在颤振中使用一些部分类,但不知怎么的,它不适用于已实现的抽象类。我举一个例子

my_interface.dart

代码语言:javascript
复制
abstract class MyInterface {
  void method1();
  void method2();
}

my_parent.dart

代码语言:javascript
复制
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

代码语言:javascript
复制
part of 'my_parent.dart';
class MyChild extends MyParent {

_MyChild() : super();

  @override
  void method2() {}
}

如您所见,我的抽象类有两个方法,我希望在我的父类中编写method1的主体,在我的子类中编写method2的主体。

然后,当我调用这些方法时,我应该能够按如下方式调用

代码语言:javascript
复制
MyParent().method1();
MyParent().method2();

用飞镖就能做到吗?

EN

回答 2

Stack Overflow用户

发布于 2021-08-02 11:47:13

从这一点判断:

代码语言:javascript
复制
MyParent().method1();
MyParent().method2();

看起来,您特别希望使用MyParent的一个实例来调用子类MyChild中仅为@override的方法。这不可能有很好的理由。您可能有多个继承自MyParent的类,例如MyChild2MyChild3,因此如果您可以在MyChild中追溯重写MyParent,那么它不仅会更改MyChildMyParent,还会更改MyChild2MyChild3。这将给每个人带来重大问题。@override的要点是,您可以在子类中更改一个方法,而不需要在超类中更改它。而且,为了让MyParent继承MyChild,必须已经定义了它,所以如果MyParent依赖于MyChild来实现method2,那么您不会遇到一个悖论吗?

如果您想使用MyParent调用运行时不知道的函数,那么只需给MyParent一个回调字段,并在准备就绪时提供它。或者,您可以创建一个实现mixin并使用class MyParent extends MyInterface with MyMixinclass MyParent extends MyInterface with MyMixin

另外,如果没有为abstract类中的方法提供具体实现,那么必须在每个子类中这样做。这意味着您无论如何都需要在@override method2中使用MyParent,或者在MyInterface中定义它。看这里

票数 0
EN

Stack Overflow用户

发布于 2021-08-03 07:59:10

我应该可以按以下方式打电话 MyParent().method1();MyParent().method2();

有两个问题:

  • MyParent不是一个有效的类。因为它不是abstract,所以它必须是可构造的,因此它的所有继承方法都必须有来自某处的实现。
  • MyParent().method2()没有意义。MyParent只实现method1。你希望MyParent().method2()做什么?其执行工作应从何而来?

如果希望MyParent只部分实现MyInterface,则可以:

  1. Make MyParent也是abstract
  2. 任一:
    • 要求调用者构造MyChild而不是MyParent
    • MyParent提供一个构造并返回factory实例的factory构造函数(或static方法)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68619608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档