gente, essa eu duvido alguém matar de primeira, mas antes uma revisão, sabemos q qnd o membro de uma classe é protected ele é visivel somente pelas classes de mesmo pacote, e por subclasses atravéz da herança, se a subclasse estiver num pacote diferente, só poderá acessar o membro protected atravéz de herança, sem exceções… Agora, se temos uma classe declarada em um pacote X, q extends uma classe com um membro protected do pacote Y, esse membro se torna private na subclasse, não sendo possível outras classes do pacote X acessá-lo, certo? bem, pra simplificar, vai um exemplo:
Superclasse em package com.foo
package com.foo;
public class Father {
protected int x;
}
Subclasse em package com.foo.chield
package com.foo.chield;
import com.foo.Father;
public class Chield extends Father {
}
ok, até ai td jóia, a variável de instância “x” vai se tornar um membro private da classe Chield, MAS… e se eu escrever uma classe com.foo.Neighbor, no mesmo pacote de Father, e tentasse acessar a variável “x” por meio de uma referência a Chield? assim:
package com.foo;
import com.foo.clield;
public class Neighbor {
public Neighbor() {
Chield chield = new Chield();
chield.x = 10; // isso daria certo? >:)
}
}
…O problema é bem intrigante, eu estava lendo o livro da Kathy sobre os niveis de acesso, e me surgiu essa dúvida q o livro não aborda… fui pro Eclipse testar, confesso q o resultado me surpreendeu, até classifiquei como um bug!
