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; } }
修复说明
- 包与类名规范:统一包名并修正类名大小写,解决编译时的类查找错误,符合Java编码规范
- 拆分public类:将
Box类从rect.java中拆分至单独文件,遵循Java单文件单public类的约束 - 修正构造方法:构造方法名与类名保持一致,为参数添加类型声明,确保父类构造方法能正确接收参数
- 权限与引用修复:同包下无需import语句,直接引用类即可,避免跨包访问非public成员的权限错误
运行修复后的代码,控制台会输出10000,达成预期效果。
内容的提问来源于stack exchange,提问作者All In One Coder304751
相关产品推荐
相关产品推荐

