Variable des Schnittstellentyps

9

Ich lerne Java, ich habe die folgende Beschreibung über interface in einem Buch gesehen:

  

Wenn eine Variable als Interface-Typ deklariert ist, dann einfach   bedeutet, dass das Objekt diese Schnittstelle implementiert haben soll.

Was bedeutet das? Wenn ich eine Schnittstelle definiere:

%Vor%

Dann erkläre ich eine Variable als einen Schnittstellentyp zum Beispiel:

%Vor%
  • Wie wird die Schnittstelle implementiert?
  • Unter welchen Umständen sollte ich eine Interface Type Variable definieren?

Ich bin völlig verwirrt durch die Beschreibung des Buches ...

    
Mellon 06.12.2011, 20:18
quelle

3 Antworten

14

Sie können keine Schnittstelle instantiieren, d. h. Sie können nicht

%Vor%

Sie können eine Klasse instanziieren, die die Schnittstelle implementiert. Das heißt, eine Klasse MyClass

gegeben %Vor%

Sie können es instanziieren und einen Verweis darauf in Ihrer Variablen wie folgt platzieren:

%Vor%

Wenn Sie eine andere Klasse hatten, die MyInterface

implementiert %Vor%

Sie können auch einen Verweis auf die Instanz dieser Klasse unter Ihrer Variablen ersetzen:

%Vor%

Hier liegt die Stärke von Schnittstellen: Sie definieren Typen , nicht eine bestimmte Implementierung und lassen Sie auf eine Implementierung eines bestimmten Typs verweisen.

Es ist eine sehr gute Programmierpraxis, Klassen dazu zu bringen, Schnittstellen zu implementieren und diese zu verwenden, um auf Instanzen dieser Klassen zu verweisen. Diese Vorgehensweise ermöglicht ein hohes Maß an Flexibilität und Wiederverwendung.

Daher sollten Sie Argumente und Variablen vom Typ interface immer dann verwenden, wenn es denkbar ist, dass verschiedene Implementierungen an die von Ihnen implementierte Methode übergeben werden. Wenn Sie beispielsweise mit einer HashSet<T> -Instanz arbeiten, sollten Sie eine Variable vom Typ Set<T> verwenden, um darauf zu verweisen (die Klasse HashSet<T> implementiert die Schnittstelle Set<T> ).

    
Adam Zalcman 06.12.2011, 20:20
quelle
3

Sie können eine Schnittstelle nicht instanziieren. Aber Sie können Ihre Variable mit dem Namen der Schnittstelle eingeben:

%Vor%

Angenommen, MyObject implementiert MyInterface .

Dies kann nützlich sein, wenn Sie beispielsweise Objekte von einer externen Quelle erfassen.
In einem solchen Fall kennen Sie den realen Objekttyp nicht (und interessieren ihn auch nicht).

Sie müssen nur wissen und sicherstellen, dass es eine Schnittstelle implementiert, sodass Sie Schnittstellenmethoden für das Objekt aufrufen können.

Angenommen, Sie haben die folgende Variable:

%Vor%

Und zwei Klassen ( Foo und Bar ), die beide MyInterface implementieren.
Sie können dann die Variablen foo Instanzen von Foo und Bar zuweisen.

Dasselbe gilt natürlich auch für Methodenargumente.

    
Macmade 06.12.2011 20:20
quelle
1

Sie instanziieren keine Schnittstelle. Sie erstellen Klassen, die die Schnittstelle implementieren, diese instanziieren, aber auf die Schnittstelle verweisen (im Gegensatz zur implementierenden Klasse).

Dies ermöglicht Ihrem Code, umsetzungsneutral zu bleiben, ähnlich wie bei der Verwendung einer List -Referenz, aber einer ArrayList -Implementierung.

Wenn es mit der Abhängigkeitsinjektion kombiniert wird, vereinfacht das auch das Testen und die Erweiterbarkeit.

    
Dave Newton 06.12.2011 20:19
quelle

Tags und Links