Come le hai scritte sembrano più annidate... in modo strano.
Certo che esiste comunque. Puoi... sfruttare l'ereditarietà!
Giocatore può contenere sia oggetti di tipo GiocatoreNelMenu sia oggetti di tipo GiocatoreNelloScontro (poichè è la loro superclasse)
Più precisamente, puoi sfruttare il polimorfismo per richiamare i metodi, in questo modo:
codice:
class Giocatore {
public void update(int elapsedTime) {
System.out.println("Update Giocatore "+elapsedTime);
}
}
class GiocatoreNelMenu extends Giocatore {
public void update(int elapsedTime) {
System.out.println("Update GiocatoreNelMenu "+elapsedTime);
}
}
class GiocatoreNelloScontro extends Giocatore {
public void update(int elapsedTime) {
System.out.println("Update GiocatoreNelloScontro "+elapsedTime);
}
}
class TestE {
public static void main(String[] args) {
Giocatore g;
g = new Giocatore();
g.update(1);
g = new GiocatoreNelMenu();
g.update(2);
g = new GiocatoreNelloScontro();
g.update(3);
}
}
Output:
codice:
Update Giocatore 1
Update GiocatoreNelMenu 2
Update GiocatoreNelloScontro 3
Attento però! Se una delle altre classi definisce dei propri metodi, non puoi (e non conviene) fare in questo modo.
In altre parole, se tu fai ad esempio questa aggiunta:
codice:
class GiocatoreNelloScontro extends Giocatore {
public void update(int elapsedTime) {
System.out.println("Update GiocatoreNelloScontro "+elapsedTime);
}
public void altroUpdate() {
System.out.println("Update di GiocatoreNelloScontro");
}
}
e questa:
codice:
g = new GiocatoreNelloScontro();
g.update(3);
g.altroUpdate();
Java segnala un errore di compilazione, poichè altroUpdate() non esiste.
in sintesi, detto in parole molto spicce: le chiamate ai metodi vengono risolte grazie al tipo di oggetto a cui fai riferimento (Giocatore, nel nostro caso); essendo legato in termini di ereditarietà con altre classi, queste classi, se definiscono un metodo uguale a quello della superclasse (update(), nel nostro caso), chiamano il metodo facendo riferimento all'oggetto a cui si riferisce (e non al suo tipo... quindi a quello che crei con new). Questo si chiama Override.
Per essere certo di richiamare altroUpdate() su GiocatoreNelloScontro(), devi per forza castarlo a GiocatoreNelloScontro.
PS: Scusa se ho usato frasi un poco sconnesse, ma questa sera sono molto stanco.