Der Hauptgrund, warum Sie dies tun, ist, Ihren Code von einer bestimmten Implementierung der Schnittstelle zu entkoppeln. Wenn Sie Ihren Code wie folgt schreiben:
List list = new ArrayList();
der Rest des Codes weiß nur, dass die Daten vom Typ List
, was bevorzugt ist, weil es Ihnen zwischen verschiedenen Implementierungen der List
Schnittstelle mit Leichtigkeit zu wechseln.
Zum Beispiel sagen Sie, dass Sie eine ziemlich große 3rd-Party-Bibliothek geschrieben haben und sagen, dass Sie sich entschieden haben, den Kern Ihrer Bibliothek mit einem LinkedList
zu implementieren.Wenn Ihre Bibliothek stark auf den Zugriff auf Elemente in diesen Listen angewiesen ist, werden Sie feststellen, dass Sie eine schlechte Designentscheidung getroffen haben. Sie werden feststellen, dass Sie eine ArrayList
(die O (1) Zugriffszeit gibt) anstelle einer LinkedList
(die O (n) Zugriffszeit gibt) verwendet haben sollte. Vorausgesetzt, Sie haben an einer Schnittstelle programmiert, ist eine solche Änderung einfach. Sie würden einfach die Instanz von List
von ändern,
List list = new LinkedList();
zu
List list = new ArrayList();
und Sie wissen, dass dies funktionieren wird, weil Sie Ihren Code geschrieben haben, den Vertrag durch die List
Schnittstelle zu folgen.
Wenn Sie andererseits den Kern Ihrer Bibliothek mit LinkedList list = new LinkedList()
implementiert haben, wäre eine solche Änderung nicht so einfach, da es keine Garantie dafür gibt, dass der Rest Ihres Codes keine Methoden verwendet spezifisch für die LinkedList
Klasse.
Alles in allem ist die Wahl einfach eine Frage des Designs ... aber diese Art von Design ist sehr wichtig (besonders bei großen Projekten), da Sie später implementierungsspezifische Änderungen vornehmen können, ohne zu brechen bestehender Code.
Oh. Es tut mir Leid. weil ich zu 'object' wechsel, also vergesse ich es. – hqt
@duffymo - Diese Frage fragt, warum 'neue Liste
Es ist keine doppelte Frage. Das mögliche Duplikat hat eine allgemeine Frage, aber ein bestimmtes Detail. Ich finde diese Frage in Titel ist relevanter/synchron zu dem, was tatsächlich gefragt wird. – Dexters