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

Java报错illegal class main.java访问rect.java 求修复方案

错误分析与修复方案

核心错误点

  • 包名不统一:main.java属于MyJavaProject包,rect.java属于JavaProject包,跨包访问非public成员触发权限错误
  • 类名不符合Java规范:类名需首字母大写(main→Main,rect→Rect,box→Box)
  • 单个源文件包含多个public类:Java规定一个.java文件只能有一个public类,且类名必须与文件名一致
  • 构造方法错误:构造方法名必须与类名一致,参数未声明类型
  • Import语句错误:未使用全限定类名导入,且包名不一致导致无法正确引用

修复后的代码

1. 统一包结构并修正类名

将所有类放在同一个包(MyJavaProject)下,同时修正类名大小写:

Main.java

package MyJavaProject;

public class Main {
    public static void main(String[] args) {
        Rect r = new Box(100);
        r.getArea();
    }
}

Rect.java

package MyJavaProject;

public class Rect {
    private int height, width;

    // 父类构造方法,补充参数类型声明
    public Rect(int height, int width) {
        this.height = height;
        this.width = width;
    }

    public int getArea() {
        int area = height * width;
        System.out.println(area);
        return area;
    }
}

Box.java

package MyJavaProject;

// 单独拆分出Box类文件,符合Java单文件单public类规则
public class Box extends Rect {
    private int size;

    // 构造方法名与类名一致,补充参数类型声明
    public Box(int size) {
        super(size, size);
        this.size = size;
    }
}

修复说明

  1. 包与类名规范:统一包名并修正类名大小写,解决编译时的类查找错误,符合Java编码规范
  2. 拆分public类:将Box类从rect.java中拆分至单独文件,遵循Java单文件单public类的约束
  3. 修正构造方法:构造方法名与类名保持一致,为参数添加类型声明,确保父类构造方法能正确接收参数
  4. 权限与引用修复:同包下无需import语句,直接引用类即可,避免跨包访问非public成员的权限错误

运行修复后的代码,控制台会输出10000,达成预期效果。

内容的提问来源于stack exchange,提问作者All In One Coder304751

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:39:56