Boa noite pessoal, eu fiz alguns testes e constatei um fato, que eu achei melhor perguntar para vocês antes de tirar conclusões precipitadas…
Tenho uma variável de instância com modificador protected na classe Avo no pacote ger1;
packageger1;publicclassAvo{protectedinti=1;}
Em seguida eu tenho a classe Pai que está em outro pacote, estende de Avo e acessa a variável i através de instância, até ai tudo normal
Bom no livro diz o seguinte sobre o protected, não é possível acessar o membro i através da instância de Pai, somente através de subclasses de Pai. Mas, eu consegui acessar a variável através de instância do Pai, a unica regra é que essa classe precisa estar no mesmo pacote de Avo
no caso do protected ele pode sim acessar a variável fora do pacote, se for herança. o modificador default que determina que é só dentro do mesmo pacote
A
andreylh
Exatamente, se for por herança! Mas a classe Filho está acessando a variável por instância! Repare que a classe Pai, que está no pacote ger2 acessa a variável protected de Avo, que está no pacote ger1, por herança. Até ai sua explicação foi perfeita. Porém repare na classe Filho, ela está no pacote ger1 (mesmo do Avo) mas está acessando a variável protected através da instância de Pai que está no pacote ger2! Se eu colocar o Filho no pacote ger2, ai sim dá erro de compilação.
U
ul1sses
Se a classe Filho está dentro do pacote da Classe Avo, então ela “tem conhecimento” da existência dessa classe. Concorda?
Se ela estivesse fora, ai sim seria estranho.
Acho que essa foi a pegadinha.
A
andreylh
ul1sses:
Se a classe Filho está dentro do pacote da Classe Avo, então ela “tem conhecimento” da existência dessa classe. Concorda?
Se ela estivesse fora, ai sim seria estranho.
Acho que essa foi a pegadinha.
Concordo, só achei estranho consegui acessar através da instância de outra classe que está em outro pacote
F
francisco.gamarra
R
Rodrigo_Sasaki
andreylh:
ul1sses:
Se a classe Filho está dentro do pacote da Classe Avo, então ela “tem conhecimento” da existência dessa classe. Concorda?
Se ela estivesse fora, ai sim seria estranho.
Acho que essa foi a pegadinha.
Concordo, só achei estranho consegui acessar através da instância de outra classe que está em outro pacote
Acontece que o i tem visibilidade protected, portanto fica visível no mesmo pacote,
essa é uma pegadinha complicada, confesso, mas até que faz sentido.
R
Rodrigo_Sasaki
francisco.gamarra:
Pra mim isso não é uma pegadinha e sim um erro do compilador.
prodected não é por pacote, e sim por classe.
Como erro de compilador? você sabe o que o modificador protected faz?
F
francisco.gamarra
R
Rodrigo_Sasaki
Então explique o erro do compilador.
H
Hebert_Coelho
francisco.gamarra:
Pra mim isso não é uma pegadinha e sim um erro do compilador.
Sério mesmo?
O Java com diversos anos no mercado e um conceito básico de OO com erro não foi corrigido?
F
francisco.gamarra
H
Hebert_Coelho
francisco.gamarra:
Não não! É perfeito! Sem erros! Assim com Deus! Aliás, é tão perfeito que quase se programa sozinho. :P
É, a julgar pela sua resposta é de se imaginar que realmente você pense que seja bug.
R
Ruttmann
Caras, ultimamente estão surgindo uns trolls muito sem noção aqui…
Tá na hora da moderação entrar em ação!
:lol:
O
orobsonpires
A medida que você coloca as classes no mesmo pacote os membros protected ficam visíveis para acesso, sem precisar utilizar a herança.