ich bin dabei ein Programm in Java Umzusetzen und habe eine grundsätzliche Frage zu INterfaces.
Ich habe das Problem das eine Klasse hinter einem Interface stecken soll. Doch wie kann ich dieser Klasse einen Konstruktor geben bzw Objekte der Klasse erstellen. Wenn ich direkt die Klasse nehme geht das zwar, aber ich dachte das INterface soll dazu dienen eine Schnittstelle zur Klasse zu defnieren. Oder sind Interfaces nur dazu da sicherzustellen das die Methoden in der Klasse implimentiert sind?
interfaces definieren welche methoden überschrieben werden müssen.
der konstruktor liegt in der klasse, die das interface implementiert, und somit seine methoden überschreiben muss.
kleines Beispiel:
du möchtest für ein spiel mehrere computergegner mit unterschiedlich starker ki schreiben.
jeder spieler muss die methode makeNextMove() besitzen.
du definierst ein interface ComputerPlayer:
Code:
public Interface ComputerPlayer {
public void makeNextMove();
}
jeder der computerspieler implementiert nun das interface:
Code:
public class Player1 implements ComputerPlayer() {
// konstruktor wo dieser spezielle spieler erzeugt wird
public Player1() {
// ....
}
public void makeNextMove() {
// hier steht jetzt, wie dieser spezielle spieler seinen nächsten zug berechnet
}
}
wenn du die methode makeNextMove() nicht implementierst, meckert der compiler.
das interface sorgt also dafür, dass alle spieler ihre benötigten methoden implementieren müssen, und definiert somit eine schnittstelle für den spielcontroller.
Danke schonmal für die Antwort. Was mache ich in deinem Beispiel wenn ich jeden Play standardmässig mit etwas über den Konruktor ausstatten möchte?
Wenn ich alles richtig verstanden hab muss ich dann in deinem Beispiel sowas machen um einen neuen Player zu erstellen:
Code:
Player1 spieler = new Player1(meine_uebergebene_var);
Doch dann verstehe ich das Konzept des INterfaces nicht so ganz. Denn man muss ja trotzdem die Klasse INstanzieren und über dessen Konstruktor initialieseren. Ich dachte das Interface "schleift den Konstrukltor Quasi druch". so in etwa:
Code:
Compterplay spiel = new Computerplayer(meine_ueb_var);
Der eigentliche Hintergrund warum ich Frage, ist das ich eine Klasse schreiben soll die Komplet austauschbar ist, doch wie kann ich das erreichen wenn sowas nicht funktioniert.
ja, wenn du in Player1 den obengenannten konstruktor hast.
Anonymous hat gesagt.:
Doch dann verstehe ich das Konzept des INterfaces nicht so ganz. Denn man muss ja trotzdem die Klasse INstanzieren und über dessen Konstruktor initialieseren. Ich dachte das Interface "schleift den Konstrukltor Quasi druch". so in etwa:
Code:
Compterplay spiel = new Computerplayer(meine_ueb_var);
interfaces haben keinen konstruktor.
ich glaube auch du hast das prinzip von interfaces noch nicht ganz verstanden , interfaces dienen nur dazu, um schnittstellen zu erzwingen.
was du suchst ist vielleicht eher vererbung.