Interface

selbst auf die gefahr hin mich laecherlich zu machen, muss ich mal eine frage loswerden…
bei java gibt es doch interfaces. diese koennen doch von mehreren klassen implementiert werden. soweit habe ich alles noch gut verstanden. woher weiss aber nun eine instanz eines interfaces welche implementierung zu verwenden ist??

der jan

Interfaces haben keine Instanzen, sie definieren nur die Schnittstellen… die Klassen die die Interfaces implementieren kannst du instanziieren…

Für deine Anwendung ist es nachher völlig transparent, welche Klasse hinter der Anwendung hängt, es ist ihr quasi egal, es wird lediglich über die Interface-Methoden angesprochen

Interfaces haben keine Instanzen, sie definieren nur die
Schnittstellen… die Klassen die die Interfaces
implementieren kannst du instanziieren…

ok, da habe ich mich falsch ausgedrueckt: man kann eine variable vom typ des interfaces anlegen.

Für deine Anwendung ist es nachher völlig transparent, welche
Klasse hinter der Anwendung hängt, es ist ihr quasi egal, es
wird lediglich über die Interface-Methoden angesprochen

dabei versteh ich nicht, welche methode der verschiedenen implementierungen des interfaces aufgerufen wird…

der jan

Das Interface gibt doch genau die Methoden an (inkl. kompletter Signatur).

Gutes Beispiel ist z.b. die JDBC API zur Datenbankanbindung.

Du hast dort ein Interface ResultSet um eine Ergebnismenge auszulesen, dieses hat unter anderem eine Methode getString(int) z.b. um einen String aus dem 5. Feld oder so auszulesen.

Es ist nun für deine Anwendung völlig egal welche konkrete Implementierung (verschiedene Datenbanktreiber) dahinterstehen.

Du benutzt lediglich die Interface-Methoden und jede Klasse die das Interface implementiert, muss diese Methoden ja haben.

D.h. du benutzt in deinem Code die Methode getString auf ein ResultSet, in Wirklichkeit wird aber z.b. getString auf ein OracleResultSet oder was auch immer tatsächlich dahintersteht ausgeführt… das hat alles gewisse Ähnlichkeiten mit der Vererbung, allerdings kann man in Java Klassen nicht von mehreren Klassen ableiten (Mehrfachvererbung), das kannst du durch Interfaces ganz gut hinkriegen, da eine Klasse mehrere Interfaces implementieren kann.

ok, da habe ich mich falsch ausgedrueckt: man kann eine
variable vom typ des interfaces anlegen.

Kurze Ergänzung, ja, du kannst eine Variable anlegen.

Aber abgesehen von Primitives (int, char etc.) sind Variablen Objekt-Referenzen, d. h. mit der Variable erzeugst du noch kein Objekt.

Das Erzeugen des Objektes nennt man instanzieren, und selbiges funktioniert mit einem Interface nicht, du kannst nur in der Variable alle Arten von Objekten die dieses Interface implementieren speichern.

Z. B. Klasse Class1 und Class2 implementieren Int:
Int myObject;
myObject = new Class1();
myObject = new Class2();

Was nicht geht ist:
Int myObject = new Int();

Grüße, Robert