java - sobre - video de reciclaje para niños
¿Por qué podemos reducir la visibilidad de una propiedad en clase extendida? (3)
Tengo dos clases, Parent
:
public class Parent {
public String a = "asd";
public void method() {
}
}
Y el Child
public class Child extends Parent{
private String a = "12";
private void method() {
}
}
En Child
, trato de anular el method
padre que da un error de compilación que cannot reduce visibility of a method
que está bien.
Pero, ¿por qué este error no es aplicable a la propiedad a
? También estoy reduciendo la visibilidad de a
, pero no da un error.
En realidad estás creando una variable privada para Child. Entonces, el niño tiene dos a, uno privado y otro público. El código a continuación le muestra cómo acceder a ambos. Los métodos son para toda la clase (Parent) y sus subclases. De ahí se obtiene el error por el método.
Intente este código para ver las dos a:
public class Child extends Parent{
private String a = "12";
//private void method() {}
public static void main(String[]args){
Child c = new Child();
Parent p = c;
System.out.println(c.a + ", " + p.a);//12, asd
}
}
Esto se debe a que Parent.a
y Child.a
son cosas diferentes. Child#method()
@Override
s Parent#method()
, ya que son métodos. La herencia no se aplica a los campos.
De los Tutoriales de Oracle JavaTM - Herencia , se escribió que:
Lo que puedes hacer en una subclase
- Los campos heredados se pueden usar directamente, al igual que cualquier otro campo.
- Puede declarar un campo en la subclase con el mismo nombre que el de la superclase, ocultándolo así (no recomendado).
- Puede declarar nuevos campos en la subclase que no están en la superclase.
Usted no puede No está reduciendo la visibilidad de a
- está creando un campo nuevo, separado, que también se denomina a
.