La razón principal por la que harías esto es desacoplar tu código de una implementación específica de la interfaz. Cuando se escribe el código de la siguiente manera:
List list = new ArrayList();
el resto de su código sólo se sabe que los datos es de tipo List
, lo cual es preferible, ya que le permite cambiar entre diferentes implementaciones de la interfaz List
con facilidad.
Por ejemplo, supongamos que estaba escribiendo una biblioteca bastante grande de terceros, y diga que decidió implementar el núcleo de su biblioteca con un LinkedList
.Si su biblioteca depende en gran medida del acceso a los elementos en estas listas, eventualmente descubrirá que ha tomado una mala decisión de diseño; se dará cuenta de que debería haber usado un ArrayList
(que da O (1) el tiempo de acceso) en lugar de un LinkedList
(que da O (n) el tiempo de acceso). Suponiendo que haya estado programando en una interfaz, hacer ese cambio es fácil. Sólo tendría que cambiar la instancia de List
de,
List list = new LinkedList();
a
List list = new ArrayList();
y usted sabe que esto va a funcionar porque se ha escrito el código para seguir el contrato proporcionado por la interfaz List
.
Por otro lado, si ha implementado el núcleo de su biblioteca usando LinkedList list = new LinkedList()
, hacer un cambio así no sería tan fácil, ya que no hay garantía de que el resto de su código no haga uso de métodos específico para la clase LinkedList
.
En general, la elección es simplemente una cuestión de diseño ... pero este tipo de diseño es muy importante (especialmente cuando se trabaja en proyectos grandes), ya que le permitirá realizar cambios específicos de la implementación más tarde sin romper código existente.
Oh. Lo siento. porque cambio a 'objeto', así que lo olvido. – hqt
@duffymo - Esa pregunta es preguntar por qué 'new List
No es una pregunta duplicada. El posible duplicado tiene una pregunta genérica pero un detalle específico. Encuentro que esta pregunta en el título es más relevante/en sincronización con lo que realmente se pregunta. – Dexters