Dart中能否以A类特定实例作为父类创建B类实例?
如何用已有A类实例创建B类实例?
在Dart里,每个子类实例都会自带一个独立的父类实例部分,没办法直接把已有的A实例“绑定”成B实例的父类。但可以通过复制A实例的属性,让新创建的B实例的父类部分和这个A实例保持属性一致,具体有两种常见实现方式:
1. 通过构造函数传递属性
给A类添加带参数的构造函数,同时给B类新增一个接收A实例的构造函数,在初始化父类时把A的属性传递进去:
class A { int id; A(); // 新增带id参数的构造函数 A.withId(this.id); } class B extends A { String param; B(); // 新增从A实例创建B的构造函数 B.fromA(A a) : super.withId(a.id); }
使用方式:
var a = A(); a.id = 123; var b = B.fromA(a); print(b.id); // 输出123,和a的id一致
2. 用复制构造函数批量复制属性
如果A类的属性很多,逐个传递太麻烦,可以给A类添加一个复制构造函数,直接复制已有实例的所有属性:
class A { int id; A(); // 复制构造函数,复制传入实例的属性 A.copy(A other) : id = other.id; } class B extends A { String param; B(); // 通过父类的复制构造函数初始化 B.fromA(A a) : super.copy(a); }
这种方式后续如果A类新增属性,只需要修改A的复制构造函数即可,不用改动B的代码,扩展性更好。
内容的提问来源于stack exchange,提问作者Zoli
相关产品推荐
相关产品推荐

