Lendo sobre os modificadores de acesso, me surgiu uma grande dúvida, veja só oque diz a Wikipédia sobre o modificador protected:
Modificador de acesso protected
A instrução protected indica que o método ou a variável assim declarada possa ser acessada somente dentro do pacote em que está contida através de uma subclasse.
Então fui realizar alguns testes e gostaria de saber por que isso funciona se as classes estão em pacotes diferentes ?
Segue a classe usada com base com um atributo int protected
package teste2;
public class Super
{
protected int i = 1;
}
Primeiro exemplo: uma subclasse de Super só que em pacote direferente, tem acesso ao atributo protected
package teste3;
import teste2.Super;
public class Sub extends Super
{
int i2 = i;
public static void main(String[] args)
{
System.out.println(new Sub().i2);
}
}
Segundo exemplo: uma outra classe que não é subclasse de Super e mesmo assim tem acesso ao atributo protected
package teste2;
public class OtherClass
{
int i = new Super().i;
public static void main(String[] args)
{
System.out.println(new OtherClass().i);
}
}
Se alguém ai puder me explicar isso, por favor, obrigado…