Una interfaz es una colección de métodos relacionados, que solo contiene las firmas de esos métodos, no la implementación real.
Si una clase implementa una interfaz (class Car implements IDrivable
) tiene que proporcionar el código para todas las firmas definidas en la interfaz.
Ejemplo básico:
Tiene clases de coche y bicicleta.Tanto implementar el IDrivable interfaz:
interface IDrivable
{
void accelerate();
void brake();
}
class Car implements IDrivable
{
void accelerate()
{ System.out.println("Vroom"); }
void brake()
{ System.out.println("Queeeeek");}
}
class Bike implements IDrivable
{
void accelerate()
{ System.out.println("Rattle, Rattle, ..."); }
void brake()
{ System.out.println("..."); }
}
Ahora vamos a suponer que usted tiene una colección de objetos, que son todos "accionables" (sus clases durante todo el implementan IDrivable):
List<IDrivable> vehicleList = new ArrayList<IDrivable>();
list.add(new Car());
list.add(new Car());
list.add(new Bike());
list.add(new Car());
list.add(new Bike());
list.add(new Bike());
Si ahora quiere bucle sobre esa colección, se puede confiar en el hecho, de que todos los objetos de esa colección implementa accelerate()
:
for(IDrivable vehicle: vehicleList)
{
vehicle.accelerate(); //this could be a bike or a car, or anything that implements IDrivable
}
Al llamar a ese método de interfaz no está programando a una aplicación, sino a una interfaz: un contrato que garantiza que el objetivo de la llamada implementa una determinada funcionalidad.
Se puede lograr el mismo comportamiento usando la herencia, pero derivar de una clase base común da como resultado un acoplamiento estricto que se puede evitar usando interfaces.
otro duplicado. Me gusta esta pregunta realmente, pero ha sido publicada muchas, muchas veces ... ¿Intentó usar la barra de búsqueda? aquí encontrará muchas sugerencias: http://stackoverflow.com/search?q=programming+to+interface –