Cuando anula un método, debe mantener la firma del método y no puede reducir su visibilidad. Ahora probé lo que sucede cuando hago esto con atributos. Me sorprendió - ¡FUNCIONA! Mire usted mismo:Anular atributos
public class A {
public Integer myAttribute;
}
public class B extends A {
public String myAttribute;
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.myAttribute = "myString";
((A) b).myAttribute = 1337;
System.out.println(b.myAttribute);
System.out.println(((A)b).myAttribute);
}
}
lo tanto, es posible escribir un atributo en una subclase con el mismo nombre attibute como en la superclase, pero se puede utilizar la visibilidad diferente (modificador) y el tipo. Entonces diría que los atributos en superclase y subclase son casi completamente independientes entre sí.
Ahora, si realmente usa el mismo nombre de atributo en superclase y subclase, efectivamente oculta el atributo de la superclase. Al acceder al atributo usando la subclase, obtienes el atributo de la subclase. ¡Pero el atributo de la superclase está allí también! Debes realizar un lanzamiento para acceder al atributo de la superclase desde afuera. Desde dentro, la palabra clave "super" debe ser útil.
Pregunta 1: Ahora, básicamente, tiene dos atributos diferentes con el mismo nombre. ¿Esto no rompe LSP?
Por qué llegué a este detalle es este: Estoy experimentando con un marco de persistencia auto escrito. Quiero leer el estado interno completo de un objeto y persistir ese estado. Leo todos los valores de los atributos a través de la reflexión, comenzando en el subtipo y atravesando las superclases. Ahora, si hay dos atributos con el mismo nombre en superclase y subclase, debo recordar la clase que declara que un atributo puede asignar los valores de los atributos a los atributos correctos y restaurar el estado de un objeto.
Pregunta 2: ¿Alguna otra idea sobre cómo lidiar con este detalle? Pregunta 3: ¿Cómo manejan otros marcos de persistencia este detalle?
Nunca vi este detalle en uso. Tal vez escribir dos atributos con el mismo nombre es un poco feo, pero es posible y cualquier marco de persistencia puede enfrentarse a él. Tal vez haya situaciones en las que esta técnica pueda ser útil.
Thans por adelantado.
Gracias a todos los que responden. – anonymous