You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java运行报错:构造方法Package()、InsuredPackage()未定义如何解决?

问题原因
  • Java语言规则中,当你为类显式定义了带参数的构造方法后,编译器不会再自动生成默认的无参数构造方法
  • 你定义的Package类仅提供了public Package(String id,double weight)带参构造,InsuredPackage类仅提供了public InsuredPackage(String id,double weight)带参构造,因此直接调用new Package()、new InsuredPackage()无参构造会提示方法未定义。
解决方案

提供两种可行修复方案,选择其一即可:

方案1:为两个类补充无参构造方法

适配你现有先创建对象再赋值的代码逻辑,不需要修改主类代码:

  1. 在Package类中添加无参构造:
public Package() {
    // 可留空,也可以给属性设置默认初始值
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:18:02