Java运行报错:构造方法Package()、InsuredPackage()未定义如何解决?
问题原因
- Java语言规则中,当你为类显式定义了带参数的构造方法后,编译器不会再自动生成默认的无参数构造方法
- 你定义的
Package类仅提供了public Package(String id,double weight)带参构造,InsuredPackage类仅提供了public InsuredPackage(String id,double weight)带参构造,因此直接调用new Package()、new InsuredPackage()无参构造会提示方法未定义。
解决方案
提供两种可行修复方案,选择其一即可:
方案1:为两个类补充无参构造方法
适配你现有先创建对象再赋值的代码逻辑,不需要修改主类代码:
- 在
Package类中添加无参构造:
public Package() { // 可留空,也可以给属性设置默认初始值 }
- 在
InsuredPackage类中添加无参构造:
public InsuredPackage() { super(); }
方案2:调整主类实例化逻辑,先读参数再调用带参构造(更符合Java封装规范)
不需要修改Package和InsuredPackage类的现有代码,直接修改主类的实例化逻辑即可:
if(x == 1) { // 先读取参数再传入构造方法 String id = sc.next(); double weight = sc.nextDouble(); Package a = new Package(id, weight); // 如需将对象存入集合可在此处补充代码 } else if(x == 2) { String id = sc.next(); double weight = sc.nextDouble(); InsuredPackage b = new InsuredPackage(id, weight); // 如需将对象存入集合可在此处补充代码 }
该方案更推荐,你原本直接对a.id、a.weight赋值的写法破坏了类的封装性,类属性应当通过构造方法或者setter方法赋值才是规范写法。
内容的提问来源于stack exchange,提问作者Yung Moglis
相关产品推荐
相关产品推荐

