Dart运行报错Error: Undefined name 'yas'是什么原因导致的?
Dart子类super调用父类构造函数报
Undefined name 'yas'错误排查 复现代码
main() { CarsB cars = CarsB(lastname: 'Uysal', firstname: 'Kerem'); print(cars.firstname); } class Cars { String firstname = ''; String lastname = ''; int yas = 0; Cars( this.yas, { this.firstname = '', this.lastname = '', }); } class CarsB extends Cars { CarsB({String firstname = '', String lastname = ''}) : super(yas, firstname: firstname, lastname: lastname); }
报错信息
Error: Undefined name 'yas'. main.dart:51 : super(yas, firstname: firstname, lastname: lastname); ^^^ Exited (254)
错误原因
- 父类
Cars的构造函数将yas定义为必填的位置参数,没有配置默认值,所有子类调用父类构造时必须给该参数传入一个明确的int类型值。 - 子类
CarsB的构造函数初始化列表中写super(yas, ...)时,当前作用域不存在名为yas的可用变量:- 子类构造函数的入参只声明了
firstname、lastname两个可选命名参数,没有接收yas相关入参 - 构造初始化列表执行阶段,子类实例尚未完成初始化,无法访问从父类继承的
yas属性,因此Dart解析器找不到对应标识符,直接抛出未定义名称错误。
- 子类构造函数的入参只声明了
修复方案
二选一即可:
- 如果子类不需要外部传入
yas值,直接给父类构造的yas位置参数传固定值即可:class CarsB extends Cars { CarsB({String firstname = '', String lastname = ''}) : super(0, firstname: firstname, lastname: lastname); } - 如果需要外部创建实例时自定义
yas值,就在子类构造函数中增加对应参数,再透传给父类:class CarsB extends Cars { CarsB({required int yas, String firstname = '', String lastname = ''}) : super(yas, firstname: firstname, lastname: lastname); } // 调用时对应传入yas参数即可 // CarsB cars = CarsB(yas: 25, lastname: 'Uysal', firstname: 'Kerem');
内容的提问来源于stack exchange,提问作者Kerem Uysal
相关产品推荐
相关产品推荐

