Frage von seanjohn123, 35

Kann mir jemand erklären was die auto. Lösung zu bedeuten hat?

Eigentlich sind Instanzen von einer Interface in Java nicht möglich, deswegen bin ich über diese auto Lösung verwirrt.

Und laut Aufgabenstellung soll ich irgendwie ein Objekt von der Interface erstellen, bin mir aber nicht im klaren wie es gemeint ist.

Expertenantwort
von KnusperPudding, Community-Experte für Java, 11

Richtig. Instanzen von Interfaces (und Abstrakten Klassen) sind in der Regel nicht möglich.

Möchtest du diese jeweils selbst ausprägen, benötigst du eine eigene Klasse, welche per implements das Interface implementiert, oder per extends eine Abstrakte Klasse erweitert.

In deinem Fall geht es ja um ein Interface: BotController mit der Methode: 

public void nextStep(ControllerContext view);

So steht es im Interface drin.

Möchtest du das Interface nutzen, so kannst du entweder wie zuvor genannt, das Interface in eine neue Klasse von dir Implementieren oder du verwendest es als anonyme innere Klasse. (Von SirNik auch bereits richtig erklärt)

Heißt Konkret:

Möchtest du das Interface ohne Implementierung in einer eigenen Klasse von dir verwenden, so musst du direkt hier eine Implementierung dieser Methode vornehmen, während du eine Instanz bildest.

d.h. in dem Moment wo du schreibst:

new BotController();

erinnert dich deine IDE daran, dass du die Methode nextStep implementieren musst und ergänzt für dich:

new BotController() {

 @Override
 public void nextStep(ControllerContext view) {
   //...
 }

};

Hättest du hier gerne eine eigene Klasse, so würde das so aussehen:

public class MyBotController implements BotController {

   @Override
   public void nextStep(ControllerContext view) {
         //...
   }
}

Wenn du ein Interface "benutzen" müssen die Methoden eben verfügbar gemacht werden (durch implementation).

Antwort
von SirNik, 15

Das nennt sich "anonyme Klasse".

Man kann von Einem Interface keine Instanz erstellen, da diese abstrakt ist.
D.h. die Methoden innerhalb des Interfaces wurden nicht konkret programmiert.

Wenn du genau hinschaust, dann kommt nach deinem new BotController () direkt ein Befehlsblock mit {}.

Innerhalb diesem überschreibst du die abstrakte Methode deines Interfaces. Da nun durch diese schreibweise ( new BotCrontroller() { // Methode konkret programmiert }; )
. Da die abstrakte Methode nun KONKRET, also WIRKLICH, programmiert wurde, kann man jetzt eine Instanz davon erstellen.

Ich hoffe ich konnte dir helfen und es )
Ansonsten einfach mal nach "anonymer Klasse googeln.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten