【问题标题】:how can i initialize super class variables in dart language?如何用飞镖语言初始化超类变量?
【发布时间】:2019-01-12 16:05:29
【问题描述】:

我必须对子类和父类进行分类
我是飞镖语言的新手,我需要从子类分配超类属性

这是超类结构

class Trip{
  final int id;
  final String title;
  final double price;
  Trip({this.id,this.title,this.price});
}

这是子类

class FullTrip extends Trip{
  final String data;
  FullTrip({this.data}) : super(id:id,title:title,price:price);
}

确定这根本不起作用
问题是:我如何从 FullTrip 初始化实例并为 FullTrip 和 Trip(超类)传递变量
提前致谢

【问题讨论】:

  • 这就是它的完成方式。哪一部分不工作,“不工作”到底是什么意思?
  • 我如何从 FullTrip 初始化实例并从构造函数传递 FullTrip 和 Trip(超类)的变量
  • 我错过了你没有FullTrip中的参数。看我的回答。
  • @GünterZöchbauer,意思是“das Auto ist kaputt”:P

标签: dart


【解决方案1】:

需要在子类中重复参数。

class FullTrip extends Trip{
  final String data;
  FullTrip({this.data, int id, String title, double price}) : super(id:id,title:title,price:price);
}

有关于为构造函数减少此类样板的讨论,但据我所知还没有决定。

【讨论】:

  • 类 FullTrip 扩展 Trip{ final int id;最终字符串标题;最终双倍价格;最终字符串数据; FullTrip({this.data,this.id,this.title,this.price}) : super(id,title,price); } ???
  • 为什么要重复fullTrip 中的字段?它们已经在Trip 中并由FullTrip 继承。这样你就创建了两次存储位置,这很容易导致奇怪的错误。
  • 我要求这样做,您在第一行上方的回答中告诉我“您需要在子类中重复参数。” !?所以你的意思是我需要在子类中使用超类变量而不是重复它
  • 您需要重复构造函数参数,而不是字段声明 - 如我的回答所示。
  • @Günter Zöchbauer 这个问题很烦人,特别是如果你想继承一个 Flutter Widget。有没有关于这些讨论的文件或任何你可以指出的东西来解决这个问题?谢谢
【解决方案2】:

如果您想在子类中重新初始化扩展或实现的上层类的非私有变量在编译之前,只需使用@override。看这个例子

(如果您想尝试该代码,请记住它支持 null 安全性。如果您的测试不支持,只需删除 ? 符号。)

class Go {
  String? name = "No name";
}

class Foo implements Go { //use either implements or extends
  @override
  String? name = "Foo";
}

class Doo extends Go { //use either implements or extends
  @override
  String? name = "Doo";
}

用例示例:在上面的代码中,您可以看到在我们的上层类中我们有这个String name 变量。然后在子类中我们可以简单地覆盖该变量。之后,在 main 中,我们现在可以做一些事情,比如遍历 List<Go>,访问我们想要的内容,然后触发一些事情,比如打印名称:

void main() {
  
  List<Go> foos = [
    Go(),
    Foo(),
    Doo(),
  ];
  
  for(Go x in foos){
    print(x.name);
  }
}

输出:

No name
Foo
Doo

如果您使用 extendsimplements 关键字,这将有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2022-11-07
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多