2012-12-30 17 views
5

Recentemente ho rilevato Java e ho riscontrato un problema. Ho diversi file con classi diverse, ma non riesco a capire come posso accedere a oggetti delle altre classi in file diversi da quello che sono stati dichiarati in. Ad esempio:Accesso agli oggetti di altre classi

player.java: 
public class Player 
{ 
    public static void main(String[] args) { 
     Player player = new Player(); 
    } 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java: 
public class Monster 
{ 
    public void attackPlayer() 
    { 
     player.getLocation(); 
    } 
} 

non sono sicuro come posso accedere efficacemente a questi oggetti di altre classi da altri file e classi stessi? So che potrei rendere gli oggetti statici e quindi accedervi come variabili attraverso la classe in cui sono stati creati, ma ciò sembra piuttosto contro-intuitivo? Vengo da uno sfondo di programmazione meno orientato agli oggetti, quindi sto ancora cercando di capire lo stile di programmazione di Java.

+0

Importarli e utilizzare un'istanza dell'oggetto, ad esempio passandone uno come parametro? –

risposta

8

probabilmente stai che vogliono semplicemente qualcosa di simile:

player.java: 
public class Player 
{ 
    public static void main(String[] args) { 
     Player player = new Player(); 
     Monster monster = new Monster(); 
     monster.attackPlayer(player); 
    } 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java: 
public class Monster 
{ 
    public void attackPlayer(Player player) 
    { 
     player.getLocation(); 
    } 
} 

Speranza che aiuta/ha un senso!

+0

Grazie! Era esattamente quello che stavo cercando di capire. Grazie. –

1

Un buon punto di partenza sarebbe quello di passare nel giocatore che si vuole attaccare "quando" il mostro attacca.

battle.java

public class Battle { 

    public static void main(String[] args) { 
    Player player = new Player(); 
    Monster monster = new Monster(); 
    monster.attackPlayer(player); 
    } 
} 

player.java:

public class Player 
{ 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java:

public class Monster 
{ 
    public void attackPlayer(Player player) 
    { 
     player.getLocation(); 
    } 
} 
0

Una classe è solo un progetto per un oggetto.

È possibile chiamare solo i metodi definiti nella classe Player su un oggetto Player reale, che avete istanziato - hai fatto questo nella seguente riga nel metodo main(String[] args):

Player player = new Player(); 

Tuttavia la La variabile player è ora disponibile solo per il codice nell'ambito della sua dichiarazione - in questo caso, ovunque dopo questa riga nel metodo main(String[] args).

Non è disponibile al di fuori di questo ambito. Il metodo attackPlayer() nella classe Monster è decisamente al di fuori di questo ambito! Quando si fa riferimento a player lì, il compilatore non ha idea di cosa si riferisca a quel token. Devi passare un argomento di tipo Player, chiamato player (o qualsiasi cosa ti piaccia, davvero), a quel metodo prima di iniziare a chiamare metodi su di esso.