簡體   English   中英

不同類中對象的Java引用實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM