Para citar una respuesta anterior "Usted puede' t - porque rompería la encapsulación ". a lo que me gustaría añadir que:
Sin embargo, hay un caso de esquina donde se puede, es decir, si el método es static
(public
o protected
). No puedes overwrite the static method.
Tener un método public static
es trivial para demostrar que puede hacerlo.
Para protected
, sin embargo, necesita uno de sus métodos para realizar una conversión a cualquier superclase en la ruta de herencia y se llamará a ese método de superclase.
Este es el caso esquina estoy explorando en mi respuesta:
public class A {
static protected callMe(){
System.out.println("A");
}
}
public class B extends A {
static protected callMe(){
System.out.println("B");
}
}
public class C extends B {
static protected callMe(){
System.out.println("C");
C.callMe();
}
public void accessMyParents(){
A a = (A) this;
a.callMe(); //calling beyond super class
}
}
La respuesta sigue siendo todavía No, pero sólo quería mostrar un caso donde se puede, aunque probablemente no tendría ningún sentido y es solo un ejercicio.
Simplemente porque alguien debería preguntar, ¿por qué C extiende B si parece querer que se extienda A directamente? (Imagino que hay otras partes en las que confía en la funcionalidad de B, o algo así) –
El foo() de A se puede invocar desde C usando super.foo() solo si B no anula el foo() de A. – YoK
_ Effective Java 2nd Edition, Item 16: Favor de la composición sobre la herencia_. Además, mira el patrón del decorador; puede adaptarse a su necesidad mejor. – polygenelubricants