我有三个不同的类,都需要使用一个类的实例。那个类也可以创建自己的多个实例,比如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());
}
}
答案 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中创建一个静态方法,并作为参数,放置适当的字段。