Initialisierung einer Schnittstelle?

8

In einem aktuellen Problem habe ich ( eine Datei auf eine physischer Drucker in Java ) Ich habe den Code durchgelaufen wie ein Verrückter, der versucht, jede nützliche verpasste Information aus dem Javadoc jeder Klasse zu verschlingen.

Nun, ich habe einiges von diesem Code aus früheren Fragen gezogen, also gab es ein gutes Stück, das ich selbst nicht geschrieben habe. Das Problem, das ich bemerkt habe, ist, dass der Code, den ich gepackt habe, ein Objekt initialisiert, sagen wir "SimpleDoc", das eine Schnittstelle (Doc) implementiert und sie dieser Schnittstelle zuordnet ?!

Kleines Code-Snippet:

%Vor%

Nun, soweit ich dazu gebracht wurde, in Java zu verstehen, erschaffen wir Objekte. Ich bin vertraut mit Vererbung, und ich bin vertraut mit dem Trick der Verwendung von Schnittstellen, damit eine Klasse mehrere Superklassen "erben" kann.

Aber das passt einfach nicht richtig. Sie können eine Klasse erstellen, die eine Schnittstelle implementiert, das ist für mich in Ordnung. Aber was passiert hier, wenn eine Schnittstelle erstellt wird und ein Objekt auf seine Schnittstelle reduziert wird? Worauf greife ich zu, wenn ich meindoc genau referenziere?

    
Alex 12.01.2012, 20:49
quelle

2 Antworten

5

Der Trick besteht darin, zu erkennen, dass Sie eine Schnittstelle nicht "erstellen", "instanziieren" oder "initialisieren". Sie definieren einfach eine Variable als etwas, von dem Sie wissen, dass es diese Schnittstelle implementiert.

Sie teilen anderen Programmierern, die an diesem Code arbeiten, im Wesentlichen mit, dass Sie für den Rest dieser Methode nur daran interessiert sind, dass myDoc ein Doc ist (d. h. etwas, das die Doc -Schnittstelle erfüllt). Dies kann die Programmierung vereinfachen, da die automatische Vervollständigung der IDE Ihnen nun nur die Methoden anzeigt, die von dieser Schnittstelle definiert sind, und nicht alles, was SimpleDoc tun kann.

Stellen Sie sich vor, dass Sie in Zukunft Ihre Funktionalität erweitern möchten, so dass Sie je nach Eingabe unterschiedliche Doc-Implementierungen verwenden können. Anstatt SimpleDoc explizit zu erstellen, sagen Sie:

%Vor%

Der docFactory kann einen beliebigen Typ von Doc erzeugen, und diese Methode kümmert sich nicht wirklich darum, welche Art instanziiert wird, weil sie sie wie ein Doc unabhängig behandelt.

    
StriplingWarrior 12.01.2012, 20:56
quelle
4

Sie können keine Interfaces erstellen. Sie erstellen hier ein Objekt mydoc der Klasse SimpleDoc , das die Schnittstelle Doc implementiert. Da die Klasse diese Schnittstelle implementiert, dürfen Sie mydoc so behandeln, als wäre es eine Instanz dieser Schnittstelle. Dadurch können Sie auf alle deklarierten Methoden in der Schnittstelle zugreifen, die in der Klasse SimpleDoc

implementiert sind

Wenn Ihr Doc-Interface zum Beispiel so aussehen würde:

%Vor%

und Ihre SimpleDoc-Klasse würde so aussehen:

%Vor%

... dann könntest du nur auf die print() -Methode von dir mydoc -Objekt zugreifen. Man könnte aber auch sagen:

%Vor%

... und dann könntest du auch clear()

aufrufen     
Eike Cochu 12.01.2012 20:59
quelle