Рассмотрим следующий пример:
class Ccc implements Ttt {
@Override
public void pay() {} // must be public
}
class Ddd implements Ttt {
@Override
public void pay() {} // must be public
}
public interface Ttt {
void pay();
}
// in same package, but other file:
class Eee {
private final EnumMap<SomeEnum, Ttt> strategies = new EnumMap<>(SomeEnum.class);
Allocate() {
strategies.put(SomeEnum.CERT, new Ccc());
strategies.put(SomeEnum.GROUP, new Ddd());
}
// some other methods using `strategies` Map and method `pay`
}
Если класс Ccc
и Ddd
не реализуют Ttt
, метод pay
может быть защищен. В моем случае метод pay
используется вне класса Ccc
и Ddd
. Но я использую полиморфизм в классе Eee
, поскольку два класса реализуют класс Ttt
.
Интересно, было бы лучше, если бы метод pay
был защищен каким-либо образом? Я знаю, что должен расставить приоритеты абстракции и реализации - но я думаю, что это недостаток.