Präferenz für Schnittstellen als Referenztypen:
Wenn eine geeignete Schnittstelle vorhanden ist, sollten Sie Objekte über diese und nicht über die konkrete Klasse referenzieren.
Dies gilt für Parameter, Rückgabewerte, Variablen und Felder.
Flexibilität bei der Nutzung von Schnittstellen:
Durch die Verwendung von Schnittstellen können Sie die Implementierung ändern, ohne den Code zu beeinträchtigen.
Beispiel: Beim Wechsel von LinkedHashSet zu HashSet oder TreeSet ändern Sie einfach den Konstruktor.
Wann Schnittstellen NICHT verwendet werden sollten:
Implementierungsspezifische Funktionalität:
Wenn eine Implementierung etwas bietet, das von der Schnittstelle nicht benötigt wird (z. B. garantiert LinkedHashSet die Iterationsreihenfolge, HashSet jedoch nicht).
Ohne richtige Schnittstelle:
Einige Klassen wie String oder BigInteger haben keine entsprechenden Schnittstellen und müssen direkt verwendet werden.
Klassenbasierte Frameworks:
Beispiel: Auf OutputStream im Paket java.io wird über eine abstrakte Klasse verwiesen, nicht über eine Schnittstelle.
Implementierungsspezifische Methoden:
Beispiel: PriorityQueue implementiert Queue, verfügt aber über eine comparator()-Methode, die in Queue nicht vorhanden ist. Verwenden Sie die Klasse nur, wenn Sie diese zusätzliche Methode benötigen.
Vorteil:
Durch die Verwendung von Schnittstellen wird das Programm flexibler und modularer, sodass Sie Implementierungen problemlos ändern können, ohne vorhandenen Code zu beschädigen.
Codebeispiele
Gutes Beispiel: Schnittstelle als Typ verwenden
Set<String> s = new LinkedHashSet<>();
Schlechtes Beispiel: Verwendung der konkreten Klasse als Typ
LinkedHashSet<String> s = new LinkedHashSet<>();
Flexibilität: Änderung der Implementierung ohne Auswirkungen auf den Code
Set<String> s = new TreeSet<>();
Beispiel für die Verwendung einer Abschlussklasse wie String
String str = "Hello";
Beispiel für die Verwendung einer Framework-Basisklasse
OutputStream output = new FileOutputStream("file.txt");
Das obige ist der detaillierte Inhalt vonItem Referenzieren Sie Objekte über ihre Schnittstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!