2011-12-27 2 views
1

У меня есть три разных класса, которым все нужно использовать экземпляры одного класса. Этот класс также может создавать несколько экземпляров самого себя, таких как player1, player2 и т. Д., И static не будет работать для этого, потому что это приведет к перезаписи старого имени.Экземпляры Java для объектов в разных классах

Я знаю, что я не должен использовать «новое» ключевое слово в последнем классе, но я не знаю другого пути.

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

+0

изменить имя игрока и сохранить его статичным, но если я использую static, то игрок2 перезапишет player1 .. – user1062898

+0

Что именно вы хотите сделать с таким утверждением 'new Player(), player2 = new Player();'? – Lion

ответ

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

О, ничего себе, я не могу поверить, что не думал об этом, это было именно то, что мне нужно, спасибо. – user1062898

+1

@ user1062898: если сообщение amit помогло вам, пожалуйста, проголосуйте за него (как я это сделал). Если он решает вашу проблему, тогда «примите» ее, нажав на галочку слева от ответа. –

+1

Нужно подождать шесть минут/не иметь 15 репутации для увеличения – user1062898

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

в классе Test

так, в основном, просто сделать статический метод отображения и в качестве параметра поместите соответствующие поля.

Смежные вопросы