Forse un esempio di codice sarebbe di aiuto, userò C #, ma dovresti essere in grado di seguirlo.
Facciamo finta di avere un'interfaccia chiamata IPayable
public interface IPayable
{
public Pay(double amount);
}
Ora, abbiamo due classi concrete che implementano questa interfaccia:
public class BusinessAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
public class CustomerAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
Ora, facciamo finta di avere una raccolta di vari account, per fare questo useremo un elenco generico del tipo IPayable
List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());
Ora, vogliamo pagare $ 50,00 a tutti questi account:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Quindi ora vedi come le interfacce sono incredibilmente utili.
Sono utilizzati solo su oggetti istanziati. Non su classi statiche.
Se avessi reso pay statico, quando esegui il ciclo degli IPayable negli account To Pay non ci sarebbe modo di capire se dovrebbe chiamare pay su BusinessAcount o CustomerAccount.