Tive uma aula de programação OO essa quarta-feira. Meu professor foi falar sobre encapsulamento e meia volta, ele tinha que falar sobre os modificadores de acesso. Ele falou dos modificadores private e public corretamente, mas ao falar do protected e default ele explicou de uma forma diferente do que eu aprendi com os livros.
Então baseado nisso, resolvi postar algo para aqueles que tem dúvida quanto aos modificadores de acesso em Java.
Existem 3 modificadores de acesso, mas existem 4 níveis de acesso.
Os 3 modificadores são: private, public e protected.
Os 4 níveis de acesso são: private, public, protected e default.
Vamos começar pelo nível private. Quando vc define algum membro da classe com o modificador private vc quer dizer que aquele membro só poderá ser acessado pela classe que o contém.
Agora o public é o contrário do private. Ao marcar um membro com o modificador public, você quer dizer que ele pode ser acessado por qualquer classe. (Acesso este tanto por meio de uma instancia de uma classe, quanto por herança.)
Agora o mais complicado é entender o protected e default!
Primeiro: quando voce quiser marcar algum membro com o nível default, você não usa nenhum marcador para isso.
Segundo: protected e default tem o mesmo nivel de acesso, ou seja, a nível de pacote, com uma única diferença: posso acessar membros protegidos de uma classe em outro pacote somente por herança.
Vou dar um exemplo:
Tenho uma classe TestePai dentro de um pacote A. Tenho uma classe TesteFilho dentro do pacote B. Tenho uma classe TesteSolto dentro do pacote A.
A classe TestePai possui um membro protegido chamado nome do tipo String.
A classe TesteFilho herda a classe TestePai. A classe TesteFilho por herança acabará possuindo esse atributo nome. Se a classe TesteFilho possuir outras classes filhas, essas classes filhas herdarão esse atributo nome.
A classe TesteSolto está no mesmo pacote da classe TestePai.
Se você instanciar um objeto da classe TestePai, você poderá acessar ao atributo nome, pois eles sao do mesmo pacote.
Entendeu?
Então, resumindo: protected e padrão tem o mesmo nível de acesso, que é a nível de pacote. A diferença entre um e outro é que classes de outros pacotes só poderão acessar aquele membro protegido por meio de herança.
Fiz um código ilustrando isso:



2 02UTC Novembro 02UTC 2008 at 19:49
Obrigada
30 30UTC Setembro 30UTC 2009 at 4:20
Valeu pela explicação. Mas clara que de certos professores mesmo.
Obrigada
5 05UTC Outubro 05UTC 2009 at 16:13
Por nada