Pessoal,
Estou estudando o capítulo 1 : declarações e controle de acesso do livro da Kathy Sierra e Bert Bates ( guia para certificação ), e encontrei uma afirmação que acredito não ter sido muito boa no livro (Considerando encapsulamento e modificadores de acesso). Tal afirmação me deixou confuso em relação ao que pode acontecer no exame. (logo abaixo eu mostro qual foi a afirmação no livro)
Bom, seguem os códigos logo abaixo para que eu possa me expressar melhor:
Classe Parent com uma variável de instância x declarada como protected. Tudo ok até agora.
package certification;
public class Parent {
protected int x = 9;
}
Classe Child que estende Parent que apesar de não estar no mesmo pacote que parent possui acesso ao membro x declarado como protected.
Até aí tudo normal também.
package other;
import certification.Parent;
public class Child extends Parent {
public void testIt() {
System.out.println("x is " + x);
}
}
Agora vem a questão:
Se eu criar uma classe Neighbor que tenta acessar o membro x ( que foi herdado por child ) através de uma referência para child em neighbor, o código não compila!
Conforme o que li no livro, tudo bem também!!! Sem problemas. (Reparem que Neighbor está no mesmo pacote que Child.
package other;
public class Neighbor {
public static void main(String[] args) {
Child c = new Child();
System.out.println(c.x);
}
}
No livro, temos a declaração:
"… quando uma subclasse de fora do pacote herda um membro protect, esse membro torna-se essencialmente private dentro da subclasse…"
Até então, eu acreditei que o membro tornava-se essencialmente private.
Porém se eu mover Neighbor para o pacote de Parent da forma abaixo, o código funciona normalmente.
Ou seja, o fato de Child herdar x de Parent, não torna x essencialmente private em Child (na minha opinião).
Código que funciona:
package certification;
import other.Child;
public class Neighbor {
public static void main(String[] args) {
Child c = new Child();
System.out.println(c.x);
}
}
Considerando esse cenário, gostaria de saber se os mais experientes que já conhecem a prova para certificação acham que eu deva me preocupar com isso para a prova ou não.
Gostaria de saber se minha opinião também está correta, ou se interpretei mal o livro, pois pra mim x não virou private.
Obrigado.