Hallo, ich bin Java-Anfänger und habe mir als Trainingsprojekt vorgenommen, ein kleines Schachprogramm (vorerst keinen Computer ;-)) zu schreiben.
Dazu habe ich eine Superklasse 'Figur' mit den Attributen 'Spielfarbe' , Standort_horizontal und Standort_vertikal, sowie der Methode settoboard(h,v) gebildet. Daneben für jeden Typ von Spielfigur jeweils eine Kindklasse (also Turm, Dame, Pferd usw), in der dann hauptsächlich die Methode 'zugtest(von, nach)' drinsteht, wo also gecheckt wird, ob der eingegebene Zug erlaubt ist.
Das Schachbrett ist ein zweidimensionales Array für den Datentyp Figur.
Und genau da ist das Problem: wenn ich die Spielfiguren Turm, Pferd usw im Array ablege, kann ich nicht mehr auf deren Kindklassen-Methoden zugreifen, weil im Array ja der Datentyp der Elternklasse verlangt wird. Ich kann zwar nach der jeweiligen Kindklasse casten, aber das krieg ich irgendwie nur mit zig unschönen if-Abfragen hin.
Es gäbe auch den Workaround, den Zugcheck einfach ebenfalls in die Elternklasse zu packen und der Eltern-(und dann einzigen) Klasse 'Figur' halt noch das Attribut 'typ' zu geben. Das ist aber wenig elegant und ich will ja die Verwendung von Superklassen lernen.
Was wäre in dieser Konstellation eine elegante Lösung?
Danke für Tipps,
Christian
Dazu habe ich eine Superklasse 'Figur' mit den Attributen 'Spielfarbe' , Standort_horizontal und Standort_vertikal, sowie der Methode settoboard(h,v) gebildet. Daneben für jeden Typ von Spielfigur jeweils eine Kindklasse (also Turm, Dame, Pferd usw), in der dann hauptsächlich die Methode 'zugtest(von, nach)' drinsteht, wo also gecheckt wird, ob der eingegebene Zug erlaubt ist.
Das Schachbrett ist ein zweidimensionales Array für den Datentyp Figur.
Und genau da ist das Problem: wenn ich die Spielfiguren Turm, Pferd usw im Array ablege, kann ich nicht mehr auf deren Kindklassen-Methoden zugreifen, weil im Array ja der Datentyp der Elternklasse verlangt wird. Ich kann zwar nach der jeweiligen Kindklasse casten, aber das krieg ich irgendwie nur mit zig unschönen if-Abfragen hin.
Es gäbe auch den Workaround, den Zugcheck einfach ebenfalls in die Elternklasse zu packen und der Eltern-(und dann einzigen) Klasse 'Figur' halt noch das Attribut 'typ' zu geben. Das ist aber wenig elegant und ich will ja die Verwendung von Superklassen lernen.
Was wäre in dieser Konstellation eine elegante Lösung?
Danke für Tipps,
Christian