Tengo algunas dudas con respecto al identificador protegido. En el primer capítulo de Sun Certified Java Programmer Study Guide por K.Sierra encontré la siguiente información:Comportamiento del miembro protegido una vez que se heredó.
"Una vez que la subclase-fuera del paquete hereda el miembro protegido, ese miembro (heredado por la subclase) se convierte en privado para cualquier código fuera de la subclase, con la excepción de las subclases de la subclase ".
He proporcionado un código de muestra que refleja la declaración anterior y es absolutamente claro para mí.
// Parent class
package package1;
import package2.Child;
public class Parent {
protected int i = 5;
}
// Child class
package package2;
import package1.Parent;
public class Child extends Parent {
// variable 'i' inherited
}
package package2;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // no access
}
}
Empecé a experimentar e hice un pequeño cambio: moví al vecino al paquete1. Y hay un acceso a la variable "i" que es un poco sorprendente para mí, ya que no es conforme a la declaración "se convierte en privado a cualquier código fuera de la subclase" clase
Vecino después del cambio:
package package1;
import package2.Child;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // access!
}
}
Por favor, aclaremelo. Gracias.
Respuesta detallada y explicativa. – MrKiller21