Ich habe folgende Klassen Struktur extention: Entity
>Creature
> (Auszug) Player
>Mage
. In Mage
Klasse I implementieren Schnittstelle iCastable
mit Methode castSpell()
. In der Hauptmethode erstelle ich new Mage(...)
.Java OOP Instanz der Klasse
Problem ist, dass, wenn ich es als eine Stütze der Player-Klasse someMethod(Player player)
senden, kann ich keine Methoden aus der Schnittstelle iCastable
implementiert verwenden. Ich kann nur Methoden von Creature
Klasse über player.getCreaure.whaterver()
verwenden, weil Player
es erweitern. Wie kann ich dieses Problem lösen?
Ich möchte es nicht als eine Prop von Mage
Klasse senden, weil ich alle meine anderen Klassen wie Warrior
zum Beispiel verwenden möchte. Ich möchte auch vermeiden, player instanceof Mage
, denn wenn ich 1000 Klassen hatte, muss ich 1000 für jede Methode überprüfen. Haben Sie Ideen, wie Sie das lösen können?
EDIT hinzugefügt Code
public class Creature extends Entity {...}
public abstract class Player extends Creature {
public Player(String name) {
super(name);
}
public abstract void attack();
}
public class Mage extends Player implements iCastable {
...
@Override
public void castSpecial() {...}
}
public static void main(String[] args) {
Mage mage = new Mage("Mage");
Duel duel = new Duel(mage, monsters);
}
public class Duel {
private Player player;
...
public Duel(Player player, ArrayList<Monster> monsters) {
this.player = player;
...
}
private void castSpecial() {
// error here
player.castSpecial();
}
}
Ich versuche, so etwas wie player.getInstanceClass (Magier, Krieger oder was auch immer) .cashSpecial()
Warum Sie die Schnittstelle erweitern 'iCastable' anstatt deren Umsetzung –
Typing Fehler leider – TeodorKolev
Es würde helfen, wenn wir Code sehen können, uns Programmierer sind besser auf die Code-Lese als Englisch :) –