Можливо, приклад коду допоможе, я буду використовувати 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 не було б можливості зрозуміти, чи слід викликати оплату на BusinessAcount або CustomerAccount.