Dart子类MySmall实例object2的name属性为什么返回null?
问题原因
子类MySmall的构造函数虽然接收了name、mobile、gender、city四个父类属性对应的参数,但是在调用父类构造方法时没有将这些参数传入,仅仅执行了无参数的super(),导致父类的对应属性没有被赋值,因此访问object2.name时返回null。
解决方法
在子类初始化列表调用父类构造函数时,将接收到的父类参数透传即可,修改后的MySmall类代码如下:
class MySmall extends MyMain{ int age; String std; MySmall({this.age, this.std, name, mobile, gender, city}) : super(name: name, mobile: mobile, gender: gender, city: city); }
修改后重新运行代码,print(object2.name)就会正常输出object2。
如果是开启了空安全的高版本Dart环境,还需要给可空属性加上?标识或者增加required修饰符,避免编译报错:
// 空安全版本写法 class MyMain{ String? name; int? mobile; String? gender; String? city; MyMain({this.name, this.mobile, this.gender, this.city}); } class MySmall extends MyMain{ int? age; String? std; MySmall({this.age, this.std, String? name, int? mobile, String? gender, String? city}) : super(name: name, mobile: mobile, gender: gender, city: city); }
内容的提问来源于stack exchange,提问作者Avijit
相关产品推荐
相关产品推荐

