[英]Java Refrencing Instances of Objects in different classes
我有三個不同的類,都需要使用一個類的實例。 該類還可以創建其自身的多個實例,例如player1,player2等,而static對此不起作用,因為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());
}
}
看來您正在嘗試在“ Display
”中修改與在Test
創建的Player
實例相同的實例。 如果確實如此,則應將這些對象傳遞給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);
我必須指出這里有一些代碼味道,但這似乎是一個學習習慣,因此,在這種情況下,您不必為此擔心。
給Display類提供兩個私有Player字段和公共方法,以允許外部類在需要時與播放器進行交互,包括在需要時更改名稱。 您可以給類setPlayer1(Player p)
和setPlayer2(Player p)
方法,和/或允許該類通過構造函數參數接受兩個Player。
不管你做什么,你是對的,避免使用靜態變量,除非你有一個很好的理由這樣做。
好吧,為什么不上課:
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中創建一個靜態方法,然后將適當的字段作為參數即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.