无法访问类

Not able to access classes

提问人:ayexia 提问时间:10/22/2023 最后编辑:ayexia 更新时间:10/22/2023 访问量:64

问:

我正在尝试编写一个小项目,但对类的概念仍然很陌生,并且我的编程更加面向对象。

我已经创建了一个类,但是当我尝试在不同的类中实现其变量时,它将不起作用。我收到的错误是“缺少方法体”。

我在访问方法/类时也遇到了问题 - 由于某种原因,我无法在 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();

如果我需要显示任何其他代码片段,请告诉我,谢谢。

Java 方法

评论

1赞 rzwitserloot 10/22/2023
类包含方法、字段,很少包含初始值设定项和其他类型。您的类包含语句 ()。这些不能放在一个类中。毕竟,你认为什么时候会运行?如果希望它在执行时运行,请将其放在构造函数中。doors[0] = ...new HardRoom()
0赞 Basil Bourque 10/22/2023
在这里,通过将所有行缩进四个空格或用一对三重反引号换行来格式化您的代码块。
0赞 Basil Bourque 10/22/2023
docs.oracle.com/javase/tutorial

答:

0赞 Reilas 10/22/2023 #1

'...我已经创建了一个类,但是当我尝试在不同的类中实现其变量时,它将不起作用。我收到的错误是“缺少方法体”。...'

只能在类作用域中声明成员

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);
    }
}
0赞 ralietonle 10/22/2023 #2

面向对象编程带有许多您需要了解的概念,以免在错误面前崩溃。 这里有两个概念可以帮助您处理这些错误:

  • 可见性(变量和方法的):变量的默认可见公共的,这在处理类字段时通常不是一个好主意。有了正确的可见性,您将获得更具体的错误。

  • 静态(变量和方法): 它们是属于类的变量和方法,而不是类的实例。 下面是一个示例: 假设您有一个 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 教程。

评论

0赞 ayexia 10/22/2023
谢谢!所以这只是一个查看哪些类/变量/方法声明静态/非静态和公共/私有/等的情况?
0赞 ralietonle 10/23/2023
是的,在我提供的链接中对此进行了很好的解释。拜托,你能检查一下我的答案并点赞我的答案是否解决了你的问题吗?