JavaRush /Blog Java /Random-ES /¿Qué son las interfaces?
fog
Nivel 18

¿Qué son las interfaces?

Publicado en el grupo Random-ES
Una interfaz es un contrato (acuerdo) público y generalmente aceptado que describe algún comportamiento. ¿Para qué se necesitan? Por ejemplo, digamos que tenemos un enlace que apunta a una lista de cadenas. Digamos que se agregan muchos elementos a esta lista al principio y luego se procesa toda la lista una vez. Digamos que decidimos seguir la conocida recomendación y usar la claseArrayList:
ArrayList<String> list = new ArrayList<>();
Escribimos un comportamiento de programa en 100.500 líneas de código que usaba esta lista de cadenas y usamos métodos específicos de clase para optimizar el rendimiento ArrayList. Por ejemplo asegurarCapacity() . Siempre que las líneas se agreguen al final de la lista, todo funcionará bien y rápidamente. Pero ahora necesitamos reorientar nuestro programa a un tipo de trabajo ligeramente diferente, donde las líneas se agregan principalmente al principio de la lista. Para este tipo de carga es mucho más adecuado LinkedList. Pero si queremos traducir nuestro programa de 100.500 líneas de código a rieles LinkedList, entonces necesitaremos encontrar y eliminar el uso de ArrayListmétodos específicos, tal vez en algunos lugares cambiando en gran medida la lógica de las secciones individuales del programa. Si usáramos solo aquellos métodos que están disponibles tanto en ArrayListcomo en LinkedList, entonces no tendríamos que hacer esto. Podríamos simplemente cambiar una línea de código: la declaración de la lista:
LinkedList<String> list = new LinkedList<>();
Podemos notar que sería más conveniente colocar la declaración de métodos comunes para estas clases en una clase antecesora, posiblemente abstracta, por ejemplo AbstractList. En este caso, podríamos declarar nuestra lista así:
AbstractList<String> list = new ArrayList<>();
Y podríamos cambiar rápidamente la implementación de esta manera:
AbstractList<String> list = new LinkedList<>();
Pero en este caso, las clases que podemos usar en nuestro programa se limitan solo a los descendientes de la clase AbstractList, incluso si hay clases más adecuadas que no son descendientes de la clase AbstractList, pero que tienen los mismos métodos con el mismo comportamiento. ¿Qué tengo que hacer? Por eso se inventaron las interfaces . Una interfaz es una convención sobre un conjunto de métodos y su comportamiento al que pueden comprometerse clases completamente no relacionadas, lo que permite hacer referencia a cualquiera de ellos mediante una única referencia. Por ejemplo así:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Incluso si AnotherListClasslas clases no tienen clases antecesoras comunes, ArrayListexcepto . Un buen ejemplo de interfaz es la dirección de un automóvil: un automóvil tiene un volante, pedales y una caja de cambios. En la gran mayoría de coches, estos elementos siguen la misma convención de comportamiento. Por ejemplo, si gira el volante en el sentido contrario a las agujas del reloj, el automóvil girará a la izquierda en lugar de acelerar, independientemente de su marca. Si sabes utilizar estos controles podrás manejar fácilmente cualquier coche, independientemente de su modelo, año, marca o tipo de motor. Además, podemos imaginar una situación en la que un tipo de transporte completamente diferente (por ejemplo, una nave espacial) tenga la misma interfaz de control que los automóviles. Si usted, sabiendo conducir un coche, se encuentra en el asiento del piloto de un barco de este tipo, podrá evitar perderse en esta situación. Repitamos una vez más:LinkedListObject
  • Una interfaz es un contrato (acuerdo) sobre el comportamiento.
  • Muchas clases, incluso aquellas que no están relacionadas por herencia, pueden declarar que aceptan cumplir con este contrato (implementación de interfaz).
  • Colocar la descripción del comportamiento en una interfaz separada es muy conveniente, ya que aumenta la flexibilidad del código, permitiéndole cambiar la implementación (clase que implementa la interfaz) de la interfaz a clases que no están relacionadas por herencia.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION