Добавление интерфейса сделает более слабую герметизацию - PullRequest
0 голосов
/ 17 октября 2019

Рассмотрим следующий пример:

   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 был защищен каким-либо образом? Я знаю, что должен расставить приоритеты абстракции и реализации - но я думаю, что это недостаток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...