Peut-être qu'un exemple de code pourrait vous aider, je vais utiliser C #, mais vous devriez pouvoir suivre.
Supposons que nous ayons une interface appelée IPayable
public interface IPayable
{
public Pay(double amount);
}
Maintenant, nous avons deux classes concrètes qui implémentent cette interface:
public class BusinessAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
public class CustomerAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
Maintenant, faisons comme si nous avons une collection de différents comptes, pour ce faire nous utiliserons une liste générique du type IPayable
List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());
Maintenant, nous voulons payer 50,00 $ à tous ces comptes:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Alors maintenant, vous voyez à quel point les interfaces sont incroyablement utiles.
Ils sont utilisés uniquement sur les objets instanciés. Pas sur les classes statiques.
Si vous aviez rendu le paiement statique, lors de la lecture en boucle de l'IPayable dans accountsToPay, il n'y aurait aucun moyen de savoir s'il devrait appeler le paiement sur BusinessAcount ou CustomerAccount.