Quizás un ejemplo de código ayudaría, voy a usar C#, pero debería poder seguirlo.
vamos a pretender que tenemos una interfaz llamada IPayable
public interface IPayable
{
public Pay(double amount);
}
Ahora, tenemos dos clases concretas que implementan esta interfaz:
public class BusinessAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
public class CustomerAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
Ahora, vamos a pretender que tenemos una colección de varias cuentas, Para hacer esto, utilizaremos una lista genérica del tipo IPayable
List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());
Ahora, w e desea pagar $ 50.00 a todas esas cuentas:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Ahora puede ver cómo las interfaces son increíblemente útiles.
Se utilizan únicamente en objetos instanciados. No en clases estáticas
Si ha hecho el pago estático, al pasar por el IPayable en accountsToPay no habría forma de averiguar si debería llamar a pagar en BusinessAcount o CustomerAccount.
favor inaceptables desde la respuesta de Espo, ya que está viciado. Una interfaz tiene un archivo de clase que podría contener la implementación de un método estático (si el diseñador de Java lo permitiera), por lo que no hay problema para resolver la implementación del método estático. Funciona exactamente como con otras clases estáticas. – Mnementh
estoy de acuerdo con la respuesta dada por "erickson" http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – Maverick
This estará disponible en Java 8 por cierto. – m0skit0