Ho visto varianti di questa domanda ma nessuna di esse risolve veramente il mio problema.Come verificare se una classe estende un'altra
Diciamo che sto costruendo un esercito con le classi. Nella parte superiore della mia struttura di ereditarietà ho una classe astratta "Unità". Quindi una classe astratta "Flying", "Ground" e "Building" che estende l'unità. Quindi una classe di calcestruzzo "Helicopter" e "Jet" che estende Flying. Così come un concreto "Soldato" e "Serbatoio" classe che estende Terra. e infine un "HQ" e "Fornitura" che estende l'edificio.
Quanto segue è un metodo nella classe "Soldier":
public void attack(Unit enemy){
if(enemy.getSuperclass().equals(Flying)){
System.out.print("Soldiers cant attack flying units");
}
else{
//Code to attack enemy here
}
voglio nemico essere qualsiasi forma di unità. Questo perché un soldato dovrebbe essere in grado di attaccare sia gli edifici che le altre unità terrestri, tuttavia non voglio che i soldati possano attaccare oggetti volanti.
Il problema evidente è che perché ho dichiarato nemico come Unità, non sa quale sottoclasse a cui appartiene, e quindi sta cercando di trovare una superclasse unità che non esiste.
Sono sicuro che potrei avere un getter per ogni unità che ha impostato manualmente quale tipo di unità è ... ma è più lavoro e non sembra efficiente.
Wow, 5 risposte equivalenti pubblicate nello stesso intervallo di tempo di 10 secondi! –
Si potrebbero anche utilizzare le interfacce, poiché l'ereditarietà delle classi potrebbe essere restrittiva per modellare tutto. Ma prima provare l'eredità va bene. –
* instanceof * stupore! – NINCOMPOOP