Java引用不同类中对象的实例

时间:2011-12-27 20:55:57

标签: java static

我有三个不同的类,都需要使用一个类的实例。那个类也可以创建自己的多个实例,比如player1,player2等,而static也不适用于它,因为它最终会覆盖旧名称。

我知道我不应该在最后一堂课中使用“new”关键字,但我不知道其他方法。

public class Test{
    public static void main(String[] args){
        Player player1 = new Player("bob");
        Player player2 = new Player("Hank");
        System.out.println("Original Name: " + player1.getName());
        System.out.println("Original Name 2: " + player2.getName());
        Display dis = new Display();
        dis.disp();

        System.out.println("Changed Name: " + player1.getName());
        System.out.println("Changed Name 2: " + player2.getName());
    }
}

class Player{
    private String pName = "";
    public Player(){}
    public Player(String name){
        pName = name;
    }

    public void setName(String inName){
        pName = inName;
    }

    public String getName(){
        return pName;
    }
}

class Display{
    public void disp(){
        Player player1 = new Player(), player2 = new Player(); //Unneeded
        System.out.println("Player name: " + player1.getName());
        System.out.println("Player name 2: " + player2.getName());

        player1.setName("Joe?");
        player2.setName("Billy?");

        System.out.println("Player new name: " + player1.getName());
        System.out.println("Player new name 2: " + player2.getName());
    }
}

3 个答案:

答案 0 :(得分:4)

您似乎试图在Display中修改您在Player中创建的Test的同一个实例。如果确实如此,则应将这些对象传递给disp()

public void disp(Player player1, Player player2){
     System.out.println("Player name: " + player1.getName());
     System.out.println("Player name 2: " + player2.getName());

     player1.setName("Joe?");
     player2.setName("Billy?");

     System.out.println("Player new name: " + player1.getName());
     System.out.println("Player new name 2: " + player2.getName());
}

调用该方法将是:dis.disp(player1,player2);

我必须指出这里有一些代码味道,但它似乎是一个学习问题,所以如果是这样的话,你不应该在这个阶段过于担心。

答案 1 :(得分:4)

为Display类提供两个私有Player字段和公共方法,允许外部类在需要时与玩家交互,包括在需要时更改名称。您可以提供类setPlayer1(Player p)setPlayer2(Player p)方法,和/或允许类通过构造函数参数接受两个玩家。

无论你做什么,你都应该避免使用静态变量,除非你有非常这样做的理由。

答案 2 :(得分:0)

那么,你为什么不上课:

class Display{
    public static void disp(Player player, String newName){
        System.out.println("Player name: " + player.getName());

        player.setName(newName);

        System.out.println("Player new name: " + player.getName());
    }
}

并致电:

Display.disp(player1, "Joe?");
Display.disp(player2, "Hank?");

在测试类

所以,基本上,只需在Display中创建一个静态方法,并作为参数,放置适当的字段。