2011-12-27 59 views
1

我有三個不同的類,都需要使用一個類的實例。一個類也可以創建自己的多個實例,例如player1,player2等,靜態不會工作,因爲它最終會覆蓋舊名稱。Java Refring不同類的對象實例

我知道我不應該在最後一堂課中使用「新」關鍵字,但我不知道任何其他方式。

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

你究竟想要做什麼? – Bhushan 2011-12-27 21:00:10

+0

改變球員名稱並保持靜態,但如果我使用靜態,那麼player2將覆蓋player1 .. – user1062898 2011-12-27 21:01:02

+0

你想用這樣的語句'new Player(),player2 = new Player();'? – Lion 2011-12-27 21:02:51

回答

4

似乎您試圖在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);

我必須表明,有在這裏的一些代碼味道,但它似乎是一個學習普拉姆,所以如果是這樣的話,在這個階段你不應該太擔心。

+1

哦哇,我不敢相信我沒有想到這一點,那正是我所需要的,謝謝。 – user1062898 2011-12-27 21:04:22

+1

@ user1062898:如果amit的帖子幫助了你,請投票給它(正如我所做的那樣)。如果它解決了您的問題,請點擊答案左側的複選標記以「接受」它。 – 2011-12-27 21:06:43

+1

必須等待6分鐘/沒有15聲望upvote – user1062898 2011-12-27 21:09:50

4

爲Display類提供兩個私人播放器字段和公共方法,允許外部類與播放器進行交互(如果需要),包括更改名稱(如果需要)。你可以給類setPlayer1(Player p)setPlayer2(Player p)方法,和/或允許類通過構造函數參數接受兩個玩家。

不管你做什麼,你都應該避免使用靜態變量,除非你有這樣做的充分理由。

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?"); 

在測試類

所以,基本上,只要在顯示靜態方法並作爲一個參數,把適當的領域。