Encapsulamento

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

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:

[code]public class Pessoa {

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

}[/code]

[code]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"
}

}[/code]

É 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.

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;
 }

}

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