Metodos protecteds

10 respostas
D

Olá pessoal , estou precisando de uma ajudinha… =)
Estou estudando modificadores de acesso…e pintou uma questão que fiquei em dúvida…

Eu tenho uma classe X1 publica que possui um metodo “protected”… em uma package “A”.
Na mesma package “A” , eu tenho uma classe X11 que estende a classe X1 e herda naturalmente o método protected.

A minha dúvida e a seguinte,estou estudando pelo livro da Kathy Sierra…e no capitulo de modificadores ela fala:

“Quando a subclasse externa ao pacote herdar o membro protegido , esse membro (como foi herdado pela subclasse)se tornará privado para qualquer código externo a ela.”

Internamente (mesma package), não haverá esse problema e tanto uma instancia(referencia) , quanto uma subclasse poderão acessar o membro.

Agora conforma a kathy disse…se a subclasse for externa ao pacote , esse membro protected se tornará “privado” para qualquer código.

Então criei este dito “código externo”…

Naturalmente o membro não poderia ser acessado através de uma “referencia” devido as restrições do modificador…OK…

mas e porque que se eu …neste meu código externo…(outra classe qualquer em package “B” )…”herdar” a classe (A.X11)que herdou o método “protected” de sua superclasse (A.X1), eu consigo acessar o método…que teoricamente deveria ser “privado”?

E ate aonde sei…métodos privados não são herdados…

O que eu não estou vendo…ou o que estou pensando errado??

Valeu!!

Obrigado.

10 Respostas

Luca

Olá

Antes de detonar um autor estrangeiro a gente precisa saber como está no original. Há traduções terríveis aqui no Brasil. As vezes fico com pena de quem quer se dedicar em informática e não sabe ler inglês. Há um famoso livro de C de um consultor que vivia dando entrevistas no jornal no qual o cara traduziu TUDO e inventou um monte de termos que eu que sempre fui do ramo nunca tinha ouvido falar. Um outro caso é de um livro traduzido como Fundamentos de PHP em que a autora Julie Meloni colocou em seu site uma página renegando a tradução brasileira pois achava que o número de erros era tão grande que desvirtuaram sua obra.

O livro da Katty Sierra em português é muito bom para quem já sabe Java e consegue perceber os vários erros ou no mínimo incoerências. Isto que está citando talvez seja mais um exemplo mas eu já reparei outros.

Meu conselho: experimente, faça um teste se está em dúvida. Ou então procure confirmar em outro livro. Não confie cegamente em tudo que vê por aí como por exemplo estas bobagens que eu estou escrevedo agora depois de 6 choppes.

[]s
Luca

rodrigousp

Seguinte…
Modificadores de acesso herdados não mudam…
public herdado é public
protected herdado é protected.

Rafael_Nunes

Bem, eu fiz os testes aqui e é isto mesmo que há no livro:

Quando a classe esta no mesmo pacote, ele tem acesso ao membro protected da subclasse, porém quando ele está em um pacote externo este membro torna-se privado.

danieldestro

Não é que se torna privado. O que acontece é que classes de outros pacotes não tem acesso a membros (atributos e métodos) protected da classe herdada ou utilizada.

L

essa citacao do livro esta correta, mas tome cuidado , eu mesmo achei alguns errinhos bobos, como que em um construtor vc nao pode utilizar um membro estatico e que abstract pode ser usada em variaveis de instancia!!! sempre que tiver duvida escreva o codigo

brlima

Eu tb estou estuando pelo livro da Kathy e to achando muito bom… :smiley: Já trabalho um tempinho com java e parece que sempre to aprendendo. Exceoto por esses error que vcs tao falando ( realmente, qqer livro traduzido fica uma bosta ). Como disse o leo: sempre que tiver duvida, escreva o codigo. Digo mais: sempre escreva o codigo qdo possivel (rs)

Ano que vem to eu tentando a certificação…

Abraços!

A

hehehe… por isso que eu prefiro os originais! :smiley:

“Duque”:

A minha dúvida e a seguinte,estou estudando pelo livro da Kathy Sierra…e no capitulo de modificadores ela fala:

“Quando a subclasse externa ao pacote herdar o membro protegido , esse membro (como foi herdado pela subclasse)se tornará privado para qualquer código externo a ela.”

Neste caso, foi preciso recorrer à errata do livro para descobrir que faltava uma parte da frase que faz diferença.
Transcrevi abaixo e a parte faltante está em negrito:

ou seja: com exceção das subclasses da subclasse.

Um pouco abaixo (somente algumas linhas) tem mais uma correção.
"… quando a subclasse fora do pacote herda um membro protegido, o membro é essencialmente privado dentro da subclasse, de modo que somente a subclasse e suas subclasses podem acessá-lo."

Se você ainda assim não entendeu, dê uma olhada na figura 2-3 que mostra como funciona e teste com algum código seu também. :wink:

D

é isso ai pessoal…eu ja tinha testado…
testei as 4 condições…

uma referencia e uam subclasse na mesma package e
uma referencia e uma subclasse em uma package diferente…

nas primeiras…funcioanram ok…porque estao na mesma package…

nas duas ultimas , não funcionou a referencia…(correto - pois esta em packages diferentes…)…ja no caso da subclasse funcionou… e eu fiquei em duvida…porque o membro deveria tornar-se privado né… como uma subclasse da sublcasse iria reconhecer…se “membros privados nao sao herdados…”…

mas agora a nossa amiga…esclareceu…

Citação:
Once the subclass-outside-the-package inherits the protected member, that member (as inherited by the subclass) becomes private to any code outside the subclass with the exception of subclasses of the subclass.

deixa eu pegar esse tradutor…heheheh

obrigado a todos…

:smiley:

elvishr

Também estou estudando pelo livro da Kathy e nessa parte entendi o seguinte:

O modificador protected é bem parecido com o default, acesso de pacote, mas também acesso a outros pacotes se herdados, então entendi que os membros protected são acessíveis a outros pacotes desde que sejam herdados.

Assim que herdados, os membros são private para a classe que o herdou, se essa classe estiver fora do pacote da primeira. Se a classe estiver no mesmo pacote continuam protected e são acessíveis a subclasses dessa classe.

Por favor, me corrijam se estiver errado.

marciolx

“elvishr”:
Também estou estudando pelo livro da Kathy e nessa parte entendi o seguinte:

O modificador protected é bem parecido com o default, acesso de pacote, mas também acesso a outros pacotes se herdados, então entendi que os membros protected são acessíveis a outros pacotes desde que sejam herdados.

Assim que herdados, os membros são private para a classe que o herdou, se essa classe estiver fora do pacote da primeira. Se a classe estiver no mesmo pacote continuam protected e são acessíveis a subclasses dessa classe.

Por favor, me corrijam se estiver errado.

Se uma sentença tem mais de 10 palavras eu começo a babar :slight_smile: , mas é isso mesmo. Quando tiver esse tipo de dúvida o melhor mesmo é escrever pequenos trechos de código e tentar compilar e rodar, o que ainda por cima é uma excelente maneira de fixar na memória o conceito testado.

Criado 16 de dezembro de 2003
Ultima resposta 7 de jan. de 2004
Respostas 10
Participantes 10