ich habe gelernt, dass Interfaces nicht instanziiert werden können.
Eine Klasse, welche ein Interface implementiert, soll eine ihrer Instanzen dagegen einer Variablen vom Typ des Interfaces zuweisen können.
Frage 1: Habe ich das so richtig gelernt?
Frage 2: Was geschieht im fettgedruckten Teil des Code-Beispiels?
public class SimulatedUser {
private IReactToCommands driverPort;
public SimulatedUser(IReactToCommands driverPort) { this.driverPort = driverPort;
}
public void run() { driverPort.reactTo(new AskForPoem("en")); driverPort.reactTo(new AskForPoem("de"));
}
}
public interface IReactToCommands{
void reactTo(Object command);
}
public class AskForPoem {
private String language;
public AskForPoem(String language) {
this.language = language;
}
public String getLanguage() {
return language;
}
}
Richtig Interfaces können nicht implementiert werden. Sie sind eine Art Vertrag was die zu implementieren Klasse können muss (die Methoden die das Interface vorgibt). Im fettgedruckten Teil wird eine Instanz variable vom Typ des Interfaces deklariert. Dies kann jede beliebige Klasse sein, welches das Interface implementiert. Im Konstruktor wird diese Instanz dann übergeben.
Das interface schreibt vor dass die implemenierende Klasse reactTo kann. Die implemenierende Klasse beschreibt wie sie reactTo durchführt.
private [B]IReactToCommands driverPort;[/B]
Das ist eine Instanzvariable vom Typ IReactToCommands mit Namen driverPort.
public SimulatedUser([B]IReactToCommands driverPort[/B]) {
Konstruktor der Klasse SimulatedUser der einen Parameter vom Typ IReactToCommands entgegen nimmt.
[B]this.driverPort = driverPort;[/B]
Die Referenz des Parameters driverPort wird der Instanzvariable driverPort zugewiesen.
[B]driverPort.reactTo[/B](new AskForPoem("en"));
Die Methode reactTo wird auf der Variable driverPort aufgerufen.
Richtig Interfaces können nicht implementiert werden. Sie sind eine Art Vertrag was die zu implementieren Klasse können muss (die Methoden die das Interface vorgibt). Im fettgedruckten Teil wird eine Instanz variable vom Typ des Interfaces deklariert. Dies kann jede beliebige Klasse sein, welches das Interface implementiert. Im Konstruktor wird diese Instanz dann übergeben.
Das interface schreibt vor dass die implemenierende Klasse reactTo kann. Die implemenierende Klasse beschreibt wie sie reactTo durchführt.
Vielen Dank für die Antworten.
Sie haben mir bei der Auflösung eines vermeintlichen Widerspruchs, welcher für mich zwischen dem anfangs erwähntem Gelernten, und dem Beispiel-Code zunächst bestanden hat, geholfen.