Pessoal,nesse código o livro da Kate diz que somente rodará se eu remover a linha 10, pois doStuff não é visivel para ele mesmo pois ele esta em outro pacote.
Mas…a duvida fica por conta do seguinte, o modificador de acesso também limita o acesso da PROPRIA classe em relacao a seus atributos e métodos…?
O protected permite acesso apenas ao método ATRAVÉS da herança ou por estar no mesmo pacote.
No caso da linha 8 isso acontece, pois, ele está chamando o método através da HERANÇA.
Mas o que acontece na linha 10 é que você está chamando o método através de uma instância, o que não é válido, já que o modificador é protected (se fosse public rolaria).
Sacou a diferença?
antoniopopete
É isso.
Eu entendi o porque rodar,da mesma forma que eu não poderia chamar um método private de fora da classe.
Eu só poderia usar via herança ou no mesmo pacote.
Mas…assim,a outra classe não é filha?
Então teoricamente,eu estaria dentro da herança,ou conceitualmente estou errado?
LPJava
assim vc ta acessando os dados de uma class em um pacote diferente através da herança… o protected eu acho ele meio louco heheh!
antoniopopete
Mas teoricamente eu sou parente de mim mesmo,entao ,eu tenho acesso a minhas coisas.
LPJava
po massa os exemplos ai hehe… agor deu para sacar… mais um pirulito uhauhauh!! boa essa
antoniopopete
Então seufagner com isso você quis dizer que conceitualmente estou equivocado pois somente os filhos e as classes do mesmo pacote ou minha classe dentro dela mesma tem acesso ao método,mesmo que ela seja dona,somente pode acessar filhos e classes do mesmo pacote,pois eu não sou filho de mim mesmo…(profundo)
ehehe
valeus velhinho
F
FabioMendes
Vou mastigar:
Na linha 10, na classe ChildUtil, que se encontra dentro do package testpkg.p2, foi criado uma instância “objeto p” do tipo ParentUtil (que é uma classe pública, podendo por isso ser referenciada por qualquer classe do projeto).
O problema foi que o “objeto p” foi instanciado em uma classe que se encontra em um pacote diferente da classe responsável pelo seu tipo, a ParentUtil.
Quando é chamado os métodos do objeto p (através de “p.” ) não aparecerá o método doStuff que é protected, por isso não visível a classes de outros pacotes, a não ser se for por herança.
Agora preste atenção:
A classe ChildUtil herda a classe ParentUtil mas o “objeto p” NÃO TEM NADA A VER COM A HERANÇA!!! Sua invocação foi possivel simplesmente pq a classe ParentUtil é PUBLICA, sendo usado para instancia-lo o constructor de ParentUtil.
Já no caso da linha 8 é diferente. A herança foi realmente utilizada. O método doStuff foi acessado por um objeto da classe ChildUtil, referenciado pelo “this.”, cujo construtor é referente a classe ChildUtil, e a partir de então é sabido que o objeto local irá herdar TODOS os métodos e campos public ou protected da superclasse, no caso a ParentUtil.
Espero ter ajudado!
T+
antoniopopete
É ainda existe comida mastigada…
Velho…Show de bola sua resposta!!!
VAleus
seufagner
voce é dono das suas coisas, mas não das coisas de ParentUtil que ele protegeu, guardou numa caixa acessível apenas a seus filhos…
coisas de família…
é como se seu pai (ParentUtil) não quisesse que você pegasse o pirulito diretamente, comer muito doce faz mal… Então ele protege e te diz:
Meu filho, quer pirulito? Então peça pra mim pegar… Você diretamente não