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

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

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

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

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

Пример:

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)

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