Java创建子类实例时出错
大家好,我在创建子类的实例时遇到问题:Java创建子类实例时出错,java,Java,大家好,我在创建子类的实例时遇到问题: package room; public class Room { String roomNumber; int capacity; boolean projection; public Room(String rm, int n, boolean p) { roomNumber = rm; capacity = n; projection = p
package room;
public class Room {
String roomNumber;
int capacity;
boolean projection;
public Room(String rm, int n, boolean p) {
roomNumber = rm;
capacity = n;
projection = p;
}
public String getRoomNumber() {
return roomNumber;
}
public int getCapacity() {
return capacity;
}
public boolean hasProjector() {
return projection;
}
public class ComputerLab extends Room {
private String os;
public ComputerLab(String rm, int n, boolean p, String os) {
super(rm, n, p);
this.os = os;
}
public String getOS() {
return os;
}
public void setOS(String update) {
os = update;
}
}
public static void main(String[] args) {
Room r;
r = new ComputerLab("G102", 20, true, "WindowsXP");
System.out.println(r.getCapacity());
}
}
在我在主函数中创建ComputerLab对象的行中,我得到以下错误:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static variable this cannot be referenced from a static context
at room.Room.main(Room.java:48)
有人能解释为什么会发生此错误以及如何修复它吗?非常感谢试试看
new Room(...).new ComputerLab(...)
您的类
ComputerLab
是一个内部类。在java中,内部类需要一个封闭类的实例,但在main()
中没有(它是一个静态方法)
尝试将内部类更改为静态
——这意味着它不需要外部类的实例,方法是将定义更改为:
public class ComputerLab extends Room
到
因为内部类不是静态的,所以它需要一个周围类的实例。虽然有一种方法可以解决这个问题,但我相信您期望的行为将来自更像这样的代码
public class Room {
protected String roomNumber;
protected int capacity;
protected boolean projection;
public Room(String rm, int n, boolean p) {
roomNumber = rm;
capacity = n;
projection = p;
}
public String getRoomNumber() {
return roomNumber;
}
public int getCapacity() {
return capacity;
}
public boolean hasProjector() {
return projection;
}
public static void main(String[] args) {
Room r = new ComputerLab("G102", 20, true, "WindowsXP");
System.out.println(r.getCapacity());
}
}
class ComputerLab extends Room {
private String os;
public ComputerLab(String rm, int n, boolean p, String os) {
super(rm, n, p);
this.os = os;
}
public String getOS() {
return os;
}
public void setOS(String update) {
os = update;
}
}
您的内部类应该是静态的,以便像这样使用它。嵌套类的良好使用与给定嵌套类的帮助器类一样
我个人非常喜欢将类拆分为单独的文件。您可以在ComputerLab类的声明中添加static:
public static class ComputerLab extends Room ...
要做的第一件事:不要试图运行无法编译的代码。您有一个编译错误,因此在尝试运行代码之前,您应该在错误列表中找到它。
public static class ComputerLab extends Room ...