Почему Java позволяет повысить видимость защищенных методов в дочернем классе?

abstract class Base{
      protected abstract void a();
}

class Child extends Base{
      @Override
      public void a(){
          //why is this valid
      }
}

Почему мы не можем уменьшить видимость, но можем ее увеличить?

Также мне нужно реализоватьTemplate pattern в котором видимые публичные методы могут быть только базового класса.

Пример:

abstract class Base{
      public void callA(){
      //do some important stuff
      a();
      }

      protected abstract void a();
}

class Child extends Base{
      @Override
      public void a(){
          //why is this valid
      }
}

Теперь, если Java позволяет увеличить видимость, то есть два метода, видимых публично ??

Я знаю, что интерфейс - это одно из решений, но есть ли другой выход ???

Ответы на вопрос(4)

Ваш ответ на вопрос