Pregunta

¿Por qué el compilador muestra un mensaje de error cuando reduce la visibilidad de un método al anularlo en la subclase?

¿Fue útil?

Solución

Debido a que cada instancia de la subclase todavía necesita ser una instancia válida de la clase base (ver Principio de sustitución de Liskov ).

Si la subclase ha perdido repentinamente una propiedad de la clase base (es decir, un método público, por ejemplo), ya no sería un sustituto válido para la clase base.

Otros consejos

Porque si esto estuviera permitido, la siguiente situación sería posible:

Class Sub hereda de la clase Parent. Parent tiene un método público foo , Sub hace que ese método sea privado. Ahora el siguiente código se compilaría bien, porque el tipo declarado de bar es Parent:

Parent bar = new Sub();
bar.foo();

Sin embargo, no está claro cómo debería comportarse esto. Una posibilidad sería dejar que cause un error de tiempo de ejecución. Otra sería simplemente permitirlo, lo que haría posible llamar a un método privado desde afuera, simplemente enviando a la clase principal. Ninguna de esas alternativas es aceptable, por lo que no está permitida.

Porque los subtipos tienen que ser utilizables como instancias de su supertipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top