tan sobre reutilizar reducir recuperar reciclar reciclaje que por para niños los las importante importancia imagenes educativo como colorados casa java inheritance field visibility

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 .