提问人:ayexia 提问时间:10/22/2023 最后编辑:ayexia 更新时间:10/22/2023 访问量:64
无法访问类
Not able to access classes
问:
我正在尝试编写一个小项目,但对类的概念仍然很陌生,并且我的编程更加面向对象。
我已经创建了一个类,但是当我尝试在不同的类中实现其变量时,它将不起作用。我收到的错误是“缺少方法体”。
我在访问方法/类时也遇到了问题 - 由于某种原因,我无法在 Main 中初始化我的类。我总是收到一条消息,说将我的变量更改为静态(即使有人建议我不要这样做)。
我希望这是有道理的。任何帮助将不胜感激,谢谢!
这是我的班级门
class Door {
String description;
int damage;
String keyItem;
boolean checkItem(String item) {
if (Objects.equals(keyItem, "") || Objects.equals(item, keyItem)) {
return true;
}
return false;
}
public Door(String description, int damage, String keyItem, boolean checkItem){
}
}
这是我尝试实现到另一个类的时候
class HardRoom extends Room {
public HardRoom() {
}
Door[] doors = new Door[4];
doors[0] = new Door("A wooden red door, it stares at you intently. You notice a few chips engraved onto the door. What kind of damage have people tried inflicting on this door..?", -2, "strawberry", false);
这是我的主要方法,我无法在不使它们全部静态的情况下实际创建我的新房间、HardRoom、HarderRoom 或 Player。
public static void main(String args[]) {
while (true) {
Room entrance = new Room();
HardRoom doorRoom = new HardRoom();
HarderRoom keyRoom = new HarderRoom();
Player newPlayer = new Player();
newPlayer.init();
如果我需要显示任何其他代码片段,请告诉我,谢谢。
答:
'...我已经创建了一个类,但是当我尝试在不同的类中实现其变量时,它将不起作用。我收到的错误是“缺少方法体”。...'
只能在类作用域中声明成员。
class HardRoom extends Room {
Door[] doors = new Door[4];
public HardRoom() {
doors[0] = new Door("A wooden red door, it stares at you intently. You notice a few chips engraved onto the door. What kind of damage have people tried inflicting on this door..?", -2, "strawberry", false);
}
}
面向对象编程带有许多您需要了解的概念,以免在错误面前崩溃。 这里有两个概念可以帮助您处理这些错误:
可见性(变量和方法的):变量的默认可见性是公共的,这在处理类字段时通常不是一个好主意。有了正确的可见性,您将获得更具体的错误。
静态(变量和方法): 它们是属于类的变量和方法,而不是类的实例。 下面是一个示例: 假设您有一个 A 类:
公共类 A{
static int i = 0; int j ; public A(int k){ this.i = k; } public static printI(){ System.out.println(this.i); } public printJ(){ System.out.println(this.j); }
}
然后:
A a = new A();
A b = new B();
a.printI() # 0
a.i++;
a.j++;
a.printI() # 1
A.printI() #1
a.printJ(); # 1
b.printJ(); # 0
正如你所看到的,i 由 a 和 b 共享。
甚至 A,类本身。这意味着你不需要实例化 A 的对象来操作 i。 这与执行 Math.PI 时相同(PI 是 Math 类的静态变量)。 因此,如果你明白了这一点,你也可以理解静态方法不能操作非静态变量(因为非静态变量是在类的对象实例化时诞生的,而静态变量不需要它)。
在你的例子中,main(通常)是一个静态方法,这就是为什么它要求你将变量更改为静态。
有许多基本概念,例如在 Java 中编码。这是一个很好的精简 java 教程。
评论
doors[0] = ...
new HardRoom()