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

构造器实参与形参长度不匹配:Circle类构造器报错求助

解决Java子类构造器的参数不匹配错误

这个问题其实是Java继承机制里的常见小坑,咱们一步步拆解解决:

错误原因

在Java中,子类构造器默认会自动调用父类的无参构造器(也就是super()),但你的Shape抽象类只定义了一个带参数的构造器:

protected Shape(DrawAPI drawAPI){
    this.drawAPI = drawAPI;
}

它没有无参构造器,所以当你在Circle的构造器里没显式调用super(drawAPI)时,编译器会尝试插入默认的super(),但父类根本不存在这个构造器,就会抛出「Actual and formal arguments differ in length」的错误。

解决方案

唯一靠谱的做法是在Circle构造器的第一行显式调用父类的带参构造器——记住,super()必须是构造器里的第一条语句,修正后的代码如下:

class Circle extends Shape {
    private int x, y, radius;
    public Circle(int x, int y, int radius, DrawAPI drawAPI) {
        super(drawAPI); // 必须放在构造器第一行,显式传递父类需要的参数
        this.x = x;
        this.y = y;
        this.radius = radius;
    }
    public void draw() {
        drawAPI.drawCircle(radius,x,y);
    }
}

额外提醒

有人可能会想:给Shape加个无参构造器行不行?比如:

protected Shape() {}

虽然能糊弄过编译器,但这样drawAPI会被初始化为null,调用draw()方法时直接就会抛出NullPointerException,完全违背了你设计抽象类的初衷,这种做法绝对不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:45:35