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

Java对象声明时传入参数不被编译器识别的报错如何修复?

问题排查与修复方案

核心报错原因

  • Main类不必要地继承了Quadrilateral类:Java中如果子类没有显式定义构造方法,编译器会自动生成无参构造方法,该构造会默认调用父类的无参构造。但Quadrilateral仅提供了需要4个Point参数的构造方法,没有无参构造,因此触发参数不匹配的编译错误,报错提示中at quadrilateral.Main.(Main.java:1)也指向该问题。
  • 类设计逻辑错误:Quadrilateral(四边形)继承Point(点)不符合面向对象is-a的继承规则,四边形属于包含多个点的图形,应该用组合而非继承实现。
  • 代码存在未声明的成员变量:Point类中的x、y,Quadrilateral类中的p_1、p_2、p_3、p_4都没有提前声明,Trapezoid类也没有实现getArea()方法,会触发后续编译错误。

修复方案

步骤1:移除Main类的继承关系

Main作为启动类不需要继承任何业务类,修改后代码如下:

public class Main {
    public static void main(String[] args) {
        Trapezoid trap = new Trapezoid(new Point(1,5),new Point(5,5), new Point(2,7), new Point(4,7));
        System.out.println(trap.getArea());
    }
}

步骤2:修正Point类定义,补充成员变量

public class Point{
    // 补充成员变量声明
    protected int x, y;
    
    Point(int x_pass,int y_pass) {
        this.x = x_pass;
        this.y = y_pass;
    }
}

步骤3:修正Quadrilateral类的继承关系和成员定义

移除对Point的继承,补充成员变量声明:

import java.lang.Math;
public class Quadrilateral {
    // 补充成员变量声明
    protected Point p_1, p_2, p_3, p_4;

    Quadrilateral(Point p1, Point p2, Point p3, Point p4) {
        this.p_1 = p1;
        this.p_2 = p2;
        this.p_3 = p3;
        this.p_4 = p4;
    }
}

步骤4:补充Trapezoid类的getArea方法实现

示例逻辑基于梯形面积公式:(上底+下底)*高/2:

public class Trapezoid extends Quadrilateral{
    Trapezoid(Point p1, Point p2, Point p3, Point p4) {
        super(p1,p2,p3,p4);
    }

    public double getArea() {
        // 计算上下底长度、高度,可根据实际坐标逻辑调整计算规则
        double bottom = Math.sqrt(Math.pow(p_2.x - p_1.x, 2) + Math.pow(p_2.y - p_1.y, 2));
        double top = Math.sqrt(Math.pow(p_4.x - p_3.x, 2) + Math.pow(p_4.y - p_3.y, 2));
        double height = Math.abs(p_3.y - p_1.y);
        return (top + bottom) * height / 2;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:27:03