¿Por qué Java permite aumentar la visibilidad de los métodos protegidos en la clase secundaria?

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

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

¿Por qué es que no podemos reducir la visibilidad pero podemos aumentarla?

También necesito implementarPatrón de plantilla En el que los métodos públicos visibles solo pueden ser de clase base.

Ejemplo:

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
      }
}

Ahora, si java permite aumentar la visibilidad, ¿hay dos métodos visibles públicamente?

Sé que la interfaz es una solución, pero ¿hay alguna otra salida?

Respuestas a la pregunta(4)

Su respuesta a la pregunta