Hola,
Muy buena explicación, solamente quisiera agregar algo, según la RAE:
De lo cual se puede concluir que sirve para unir dos componentes de alguna forma que sea genérica, solamente importando la compatibilidad, eso permite que se conecten varios componentes polimórficos (que pueden tener diferentes formas). Y creo que un ejemplo más específico podría ser:
Código Java:
Ver originalpublic interface Animal {
}
public class Perro implements Animal {
}
public class Gato implements Animal {
}
public class Jaula {
public void enjaular(Animal animalito) {
}
}
Jaula jaula = new Jaula();
jaula.enjaular(new Perro); // Enjaulé un perro.
jaula.enjaular(new Gato); // Enjaulé un gato en la misma jaula,
// posiblemente a la par del perro, dependiendo de la implementación de enjaular.
Si ves en el ejemplo, yo puedo enjaular un animal en una jaula, valga la redundancia, sin importar si es un perro o un gato puesto que los dos son animales, sino existieran las interfaces tendría que duplicar la funcionalidad, una para enjaular perros y otra para enjaular gatos.
Aunque algunas veces se confunde el concepto de las clases abstractas y las interfaces puesto que ofrecen una funcionalidad parecida. A mi en lo personal me gusta pensar en una interfaz como un contrato o certificado, si el Perro está certificado como Animal puede ser usado y aceptado en cualquier lugar donde se acepte o permita el certificado de Animal.
Saludos,