Возможно, пример кода поможет, я собираюсь использовать C #, но вы должны быть в состоянии следовать.
Давайте представим, что у нас есть интерфейс под названием IPayable
public interface IPayable
{
public Pay(double amount);
}
Теперь у нас есть два конкретных класса, которые реализуют этот интерфейс:
public class BusinessAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
public class CustomerAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
Теперь давайте представим, что у нас есть коллекция различных учетных записей, для этого мы будем использовать общий список типа IPayable
List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());
Теперь мы хотим заплатить $ 50,00 на все эти счета:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Итак, теперь вы видите, как интерфейсы невероятно полезны.
Они используются только для созданных объектов. Не на статических классах.
Если бы вы сделали оплату статичной, при циклическом просмотре списка IPayable в accountToPay не было бы способа выяснить, следует ли вызывать pay на BusinessAcount или CustomerAccount.