如何从不同的类和包访问对象?

时间:2014-02-22 18:43:20

标签: java class object methods

所以,我是一名学习程序员,2个月前我开始学习Java作为我大学的课程。我真的很喜欢在业余时间编程而且我正在尝试制作游戏。目前有一个问题我无法解决。

我有一个名为Move的类,我在我的类中声明了Start: 移动move1 = new Move();

现在,当我回到我的Move课程中时,我想访问此移动1,但它不允许我。它说:classname无法解析。

澄清:

public class Move {
    private String s = null;
    public void setName(String s) {
       name = s;
    }
    public String getName() {
    return name;
    }
    public void setList() {
    System.out.println(move1.getName() + move2.getName()); // This won't work
    }
}

开始课程:

public class Start {
   public static void main(String[] args) {
      Move move1 = new Move();
      Move move2 = new Move();
      move1.setName(kick);
      move2.setName(punch);
   }
}

如果有人可以帮助我,那真是太棒了!

-edit

OK!我得到了一些反应,但我没有得到我需要的答案。我知道现在我可以使用this而不是对象名称,但如果我想使用第二个对象怎么办?我改变了上面的代码。

5 个答案:

答案 0 :(得分:1)

您遇到的问题是名称move1和move2超出了setList方法的范围。它们在Start.main中定义为局部变量,因此它们只在那里可见。

有很多方法可以解决这个问题。最直接的方法是将setList方法移动到Start。因为你是从main调用它的,这是一个静态方法,所以setList也必须是静态的。

public class Start { public static void main(String[] args) { Move move1 = new Move(); Move move2 = new Move(); move1.setName(kick); move2.setName(punch); setList(move1, move2); } public static void setList(Move move1, Move move2) { System.out.println(move1.getName() + move2.getName()); } }

如果你认为setList应该在Move类中,你需要将第二步作为参数传递。

public class Move { ... public void setList(Move other) { System.out.println(this.getName() + other.getName()); } }

答案 1 :(得分:0)

您无需说move1.getName()。您可以改为this.getName()。关键字this指的是调用方法的任何对象 - 在本例中为move1

这是因为对象move1仅存在于Start中主方法的范围内。因此,“move1”在main以外的任何地方都没有意义。

实际上,关键字this可以省略;你可以说getName()而不在它前面放任何东西。

答案 2 :(得分:0)

move1Move类中Start类定义的对象,因此您无法访问它。您只需使用下面的行访问Move类的方法。

System.out.println(getName()); // THis will work

答案 3 :(得分:0)

访问当前移动对象(move1)的正确方法是使用this关键字。你可以在Move类中说System.out.println(this.getName());

答案 4 :(得分:-2)

也许你没有添加类Move的导入?当您从其他包访问对象时,它是必需的。