Diferença entre protected e friendly

galera
estava estudando aqui, e parei pra pensar

Quando não definirmos nada, a classe, método ou variavel por default é friendly certo? É visível por todas as classes no pacote
E quando definirmos protected o mesmo acontece, é visível por todas as classes no pacote

qual a diferença entre os 2 entao? protected e friendly?
se puderem me ajudar…
obrigado! ;D

[quote=davi1993]galera
estava estudando aqui, e parei pra pensar

Quando não definirmos nada, a classe, método ou variavel por default é friendly certo? É visível por todas as classes no pacote
E quando definirmos protected o mesmo acontece, é visível por todas as classes no pacote

qual a diferença entre os 2 entao? protected e friendly?
se puderem me ajudar…
obrigado! ;D[/quote]

Simples, com protected você consegue acessar de fora do pacote, desde que a classe seja filha.
Se você disser que um método da classe X é protected, por exemplo, somente as suas classes filhas e do mesmo pacote terão acesso a esse método.

Consegui clarear as ideias?:slight_smile:
Abraços.

uhnn

entao se for protected -> visivel para as classes dos pacotes e classes filhas
se for friendly -> visivel apenas para as classes dos pacotes e nao para as filhas

seria basicamente isso?
se for, vlww conseguiu sim xD

Sim, é isso mesmo.

obrigado! :smiley:

Será de onde que surgiu esse nome “friendly”?

A documentação oficial sempre refere a esse tipo como “default”.

Existe no C++ um tipo de modificador chamado friend, que é bem diferente do default do java. Se uma classe A tem B como seu friend, significa que todos os métodos e atributos de B serão visíveis para A, não importando se são privados ou protected.

Não existe em lugar nenhum da JLS (Java Language Specification - http://java.sun.com/docs/books/jls/ ) o termo “friendly”.
(Veja o nome correto - “default” - em http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.6 )

“Friendly” para mim é coisa de guerra (“friendly fire” = “fogo amigo”).

Por algum motivo, alguns gringos ( veja http://www.javarhythm.com/access-modifiers-in-java, que é um exemplo dessas gringuices ) começaram a chamar o acesso default de “friendly” mas isso é só um nome inventado para fins didáticos, mas completamente inexato.

“Friend” em C++ é, conforme disse o ViniGodoy, um conceito completamente diferente: é algo implementado em outra classe, ou algo global, que por algum motivo você dá completo acesso à implementação da sua classe. Nesse ponto, está mais para um “boyfriend” ou para uma “girlfriend”, não exatamente para um “friend” normal, porque é algo que é explicitamente citado por você na implementação da sua classe, que tem permissão de acessar as partes privadas da classe.