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

Java:调用超类构造函数失败求助(附Stock类代码)

问题排查与修复:Stock类构造函数错误导致的超类构造调用失败

嘿,我一眼就揪出问题所在了——你的Stock类构造函数写法完全错误,这直接引发了后续的构造调用问题!

核心错误点

构造函数的关键规则是绝对不能有返回值类型,包括void!你给Stock构造函数加了void修饰符,这就把它变成了一个名为Stock的普通方法,而不是真正的构造函数。

这会触发两个连锁问题:

  1. Java会自动生成一个默认的无参构造函数,但你想要的带String symbol参数的构造逻辑完全没生效;
  2. 如果Stock类是子类(继承了某个超类),Java会在子类构造的第一行默认调用超类的无参构造。如果你的超类没有定义无参构造,又没有显式调用超类的带参构造,就会直接报“调用超类构造函数失败”的编译错误。

修复后的完整代码

public class Stock{
    private String symbol;
    private int totalShares;
    private double totalCost;

    // 去掉void修饰符,这才是正确的带参构造函数
    public Stock(String symbol){
        this.symbol = symbol;
        totalShares = 0;
        totalCost = 0.0;
    }

    public double getProfit(double currentPrice){
        double marketValue = totalShares * currentPrice;
        return marketValue - totalCost;
    }

    public void purchase(int shares, double pricePerShare){
        totalShares += shares; // 修复你代码里的拼写错误shar...
        totalCost += shares * pricePerShare;
    }
}

额外提示(如果涉及超类继承)

如果Stock类继承了某个超类,比如public class Stock extends BaseStock,那你需要确保在Stock的构造函数第一行显式调用超类的构造函数(如果超类没有无参构造的话),示例如下:

public Stock(String symbol){
    super(/* 超类构造需要的参数 */); // 必须放在构造函数第一行
    this.symbol = symbol;
    totalShares = 0;
    totalCost = 0.0;
}

内容的提问来源于stack exchange,提问作者kknydnai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:24