есть ли преимущество использования
интерфейсы, если они реализованы
один класс?
Если ваш интерфейс реализован только одним классом, и вы на 100% уверены, что НИКОГДА не почувствуете необходимость добавить еще одну реализацию, то никаких преимуществ нет.
Во всяком случае, я думаю, есть другая ситуация, которую нужно иметь в виду. Предположим, у вас есть класс, который делает нечто большее, чем то, что вы хотите представить другому клиентскому классу. Чем интерфейс может быть использован для ограничения методов вашего класса, которые клиент может вызывать:
public interface clientInterface{
public foo();
public bar();
}
public class yourClass implements clientInterface{
public foo(){}
public bar(){}
public doSomethingElse(){}
}
public class clientSideFactory{
public clientInterface getClass(){
return new yourClass();
}
}
public class internalSideFactory{
public clientClass getClass(){
return new yourClass();
}
}
}
В ситуации, показанной выше, даже если у вас есть единственная реализация (clientClass) интерфейса clientInterface, это полезно для возврата клиентскому классу, который должен видеть только ограниченную часть вашего класса (ограничивая видимость вашего класс полной реализации).