Interface Verständisfrage

DreiFufzich

Mitglied
Tach zusammen!

Ich lerne noch Java und arbeite gerade mit Datenbanken. Nun habe ich mal eine doofe Frage:

Java:
private static Connection conn;
Statement statement = conn.createStatement();

Was passiert hier eigentlich?

"Connection" ist ein Interface.
"Statement" ist auch ein Interface.

Connection verfügt über die Methode createStatement() die ein Statement Objekt zurückgibt. Soweit so gut. Anders würde das ja auch nicht funktionieren. Aber:

Wenn ich nun in der Java Doc. nachschaue finde ich dort nur folgende Statement-Klasse:

Das ist ja aber nicht DIE Statementklasse, aus der das Objekt entstammt, oder?

Zumindest verfügt das Statement (aus dem Code oben) nicht über die Methoden, die in der Dokumentation angegeben sind (z.B. getArguments()).

Aber irgendeine Klasse muss ja das Interface "Statement" implementieren, damit die Zuweisung überhaupt funktioniert. Nur bin ich zu doof, herauszufinden welche das ist.

Wäre super cool, wenn mir das jemand erklären könnte. Irgendwie steige ich da noch nicht so ganz hinter. Und wer nicht fragt bleibt dumm, oder? :-D
 
Aber Statement ist ja ein Interface. Und aus denen kann man ja keine Objekte erstellen?

Es muss doch also irgendeine Klasse geben, die Statement implementiert von der dann das Objekt ist oder nich?
 
Achsooooo.... Und an die kommt man nicht ran?

Ich arbeite halt ständig mit irgendwelchen Methoden von denen ich kA habe, was da eigentlich hinter steht. Das war halt jetzt einfach ein Beispiel. Und irgendwie komm ich mir damit doof vor. 😀
 
Achsooooo.... Und an die kommt man nicht ran?

Ich arbeite halt ständig mit irgendwelchen Methoden von denen ich kA habe, was da eigentlich hinter steht. Das war halt jetzt einfach ein Beispiel. Und irgendwie komm ich mir damit doof vor. 😀
LOL. Das ist ja der Witz an Interfaces: Du weißt nicht, wie die Implementierung aussieht und das muss Dich auch nicht interessieren. Wichtig ist die Spezifikation (die JavaDocs, s. den Link, den ich vorhin genannt habe), da steht alles fein säuberlich drin, was Du wissen musst. Was die Implementierung im Hintergrund alles betreibt, spielt keine Rolle und gerade beim SQL-Treiber würde Dir die Implementierung vermutlich rein gar nichts helfen 🙂

Nachtrag: natürlich kannst Du Dir die Implementierung eines Open-Source-JDBC-Treibers ansehen.
 
Das ist keine dumme Frage. Interfaces sind für Anfänger oft maximal verwirrend. Man weiß nicht, wozu das gut sein soll, man sieht keine Implementierung, irgendwas funktioniert irgendwie, alles ist neu.

Du musst Dir ein Interface wie einen Vertrag vorstellen. Nehmen wir mal die Methode https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#execute(java.lang.String) Dort ist genau beschrieben, was passiert, welche Auswirkungen was hat usw.

Während das Interface also das "Was" beschreibt, kümmert sich die Implementierung um das "Wie". Die Implementierung muss sich dabei an den Vertrag halten. Analog gilt das für den Aufrufer: der weiß, welche Pflichten er zu erfüllen hat (z. B. muss er ein SQL-Statement angeben) und was er dafür erwarten kann (Rückgabewerte, Exceptions).

List ist auch so ein Beispiel, z. B. ist https://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-E- das "Was" genau beschrieben. Das "Wie" bleibt der Implementierung überlassen, also z B. der ArrayList, der LinkedList oder was auch immer. Den Aufrufer muss die Implementierung nicht interessieren.
 

Zurück
Oben