Frage von Anonynonymous, 25

Java, Eclipse Frage zu Interfaces?

Hallo zusammen,

ich bin gerade dabei mir das Thema Interfaces anzueignen und mir stellt sich da eine Frage: Wenn eine Klasse ein Interface implementiert, sagen wir, wir haben folgende Pseudo-Programmstruktur:

<<Interface >>

Schaltbar

an()

aus()

class Fernseher implements Schaltbar

class Tischlampe implements Schaltbar

class Radio implements Schaltbar

class main.

Haben die Instanzen von den Klassen Fernseher, Tischlampe und Radio dann mit der Implementierung des Interfaces automatisch die Datenypen , Object und Schaltbar, ohne, dass ich dafür etwas weiteres tun muss?

Also, wenn ich in der Main-Methode eine neue Instanz von Fernseher erstelle, hat diese dann ohne weiteres zutun die o.g. Instanzen?

Vielen Dank im Voraus und viele Grüße.

Antwort
von LeCux, 22

Bisher definierte das Interface nur die Methoden Signaturen, die implementiert sein müssen, aber nicht die Implementation selbst.

Das hat sich mit Java 8 grundlegend geändert:

public interface A {
default void foo(){
System.out.println("Calling A.foo()");
}
}

public class Clazz implements A {
}

Clazz clazz = new Clazz();
clazz.foo(); // Calling A.foo()

Kurz geklaut von Zeroturnaround: http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/

Kommentar von Anonynonymous ,

Hey, erst einmal ´danke für deine Antwort.

Ich kannte die Möglichkeit bisher noch nicht, dass man Methoden direkt im Interface implementieren und darüber aufrufen kann.

Ich hoffe, ich habe deinen Punkt verstanden und versuche einmal zu Rekapitulieren:

Da das Objekt clazz die Methode foo() aufrufen kann muss clazz den Typ "A" innehaben, richtig?


Kommentar von PerfectMuffin ,

Eigentlich umgekehrt.

Kommentar von LeCux ,

Wie gesagt "neues" Java8 Feature!

Wenn ein Interface eine default Implementierung besitzt und eine Klasse dann dieses Interface benutzt, dann steht der Klasse bzw. einer Instanz davon die default Implementierung zur Verfügung und muss nicht selbst implementiert werden.

Früher(tm) hat man oft sowas gefunden:

interface X;

abstract class Y implements X;

class Z extends Y implements X;

Damit hat man über Bande die default Methoden durch abstrakte Klassen und Vererbung gebaut, der neue Weg ist etwas schöner, weil kompakter.

Kommentar von PerfectMuffin ,

Danach hat Fragesteller eigentlich nicht gefragt.

Kommentar von KnusperPudding ,

Die default-Implementierung kannte ich bislang (auch) nicht. Sicher sehr nützlich. Danke.

Antwort
von PerfectMuffin, 17

In der Tat.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten