Encapsulamento

4 respostas
R

Fala pessoal !
Estou com uma dúvida sobre encapsulamento:
Veja o exemplo:

class teste01 { private int atrib = 0; ---- propriedade privada public void t1() { System.out.println( atrib ) ; } public static void main( String args[] ) { teste01 t = new teste01(); t.atrib = 10; ---- Não deveria causar erro ? t.t1(); } }
Não deveria dar um erro ? Afinal, atrib não é privado ?
Obrigado pela atenção

4 Respostas

plentz

Não deveria gerar erro não. Quem está alterando o valor é a própria classe. O erro aconteceria caso você fizesse o mesmo a partir de outra classe.

Ex:
public class Pessoa {

	private String nome;
	public void setNome(String nome) {
		this.nome = nome;
	}
}
public class Test {

	public static void main(String[] args) {
		Pessoa p = new Pessoa();
		p.setNome("Renan"); --funciona
		p.nome = "Renan"; --erro, "The field Pessoa.nome is not visible"
	}

}
Lex-dmm

É permitido ao usuário ver apenas os dados necessários, todo o resto é mantido escondido, através de especificadores de acesso (public, private, protected).

O modificador de acesso private e o mais restritivo de todos, variáveis, métodos e construtores com esse modificador são visíveis somente dentro da definição da própria classe, acessando-o diretamente ou através de uma instância da mesma classe.

O modificador de acesso protected define que variáveis, métodos e construtores com esse modificador podem somente ser acessados por classes no mesmo pacote ou subclasses da classe onde o elemento foi definido, é importante notar que para os elementos serem acessados na subclasse não é preciso estar no mesmo pacote da classe pai. O modificador protected pode ser aplicado somente em variáveis, métodos e construtores, o seu uso em classes não é permitido.

O mais abrangente de todos os tipos de acesso, o modificador public declara que elementos com esse modificador são acessíveis de qualquer classe Java. Este modificador é aplicável a variáveis, métodos, construtores e classes.

O diego_sl deu um bom exemplo de encapsulamento.

pcalcado

E lembre-se que uma classe pdoe alterar atributos privados de outra instancia da mesma classe.

class A{
 private int i=0;

 public void v(A outroA){
  outroA.i=1;
 }

}
R

Agora entendi !
Novamente, agradeço a ajuda de vocês !

Criado 5 de agosto de 2005
Ultima resposta 5 de ago. de 2005
Respostas 4
Participantes 4