Возможно, пример кода поможет, я собираюсь использовать 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());
Теперь, w e хотите оплатить все эти счета в размере 50 долларов США:
foreach (IPayable account in accountsToPay)
{
account.Pay(50.00);
}
Итак, теперь вы видите, как интерфейсы невероятно полезны.
Используются только для экземпляров объектов. Не на статических классах.
Если вы сделали статическую зарплату, когда запустили IPayable в аккаунтахToPay, не было бы возможности выяснить, следует ли вызывать оплату по BusinessAcount или CustomerAccount.
Пожалуйста unaccept ответ Эспоо, поскольку она имеет недостатки. Интерфейс имеет класс-файл, который может содержать реализацию статического метода (если Java-конструктор допустил бы это), поэтому нет проблем при разрешении реализации статического метода. Он работает точно так же, как и с другими статическими классами. – Mnementh 2008-09-26 08:51:19
Я согласен с ответом, данным «erickson» http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – Maverick 2013-11-11 11:59:42
Это будут доступны на Java 8 бит. – m0skit0 2013-12-29 14:11:06