Có lẽ một ví dụ mã sẽ giúp ích, tôi sẽ sử dụng C #, nhưng bạn sẽ có thể làm theo.
Hãy giả vờ rằng chúng ta có một giao diện gọi là IPayable
public interface IPayable
{
public Pay(double amount);
}
Bây giờ, chúng ta có hai lớp cụ thể thực hiện giao diện này:
public class BusinessAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
public class CustomerAccount : IPayable
{
public void Pay(double amount)
{
//Logic
}
}
Bây giờ, hãy giả vờ rằng chúng tôi có một bộ sưu tập các tài khoản khác nhau, để làm điều này, chúng tôi sẽ sử dụng một danh sách chung về loại IPayable
List<IPayable> accountsToPay = new List<IPayable>();
accountsToPay.add(new CustomerAccount());
accountsToPay.add(new BusinessAccount());
Bây giờ, chúng tôi muốn trả $ 50,00 cho tất cả các tài khoản đó:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Vì vậy, bây giờ bạn thấy làm thế nào các giao diện là vô cùng hữu ích.
Chúng chỉ được sử dụng trên các đối tượng khởi tạo. Không phải trên các lớp tĩnh.
Nếu bạn đã thực hiện thanh toán tĩnh, khi lặp qua IPayable trong tài khoảnToPay, sẽ không có cách nào để biết liệu có nên gọi thanh toán trên BusinessAcount hoặc CustomerAccount hay không.