quinta-feira, 28 de agosto de 2008

Declarando membros de classes - Parte 3

Vamos continuar o nosso estudo sobre os níveis de acesso aplicados aos membros de uma classe. Já falamos sobre três níveis: public, protected e default. Neste post vamos falar sobre o último nível de acesso: private. O nível de acesso privado é o mais restritivo dos níveis. Ele faz com que o membro que seja marcado como tal fiquei fechado dentro da classe que o criou, ou seja, SOMENTE é possível acessar um membro privado dentro da classe que o declarou. Sendo assim, os membros private NUNCA são herdados. Bom, já que não teremos muita coisa pra falar por aqui, então vamos para os exemplos:

Dog.java
public class Dog {
private String raça = "viralata";

private void latir(){
System.out.println("au au");
}
}

Dobberman.java
public class Dobbermar extends Dog {

private void destruir(){
System.out.println("rrrrr asdfhasdasd");
}
}

Canil.java
public class Canil {
private void exibirMe(){
System.out.println("Eu posso ser acessado aqui");
}
public static void main(String args[]){
Dog dog = new Dog();
dog.latir(); // xiii
Dobberman d = new Dobberman();
d.raça = "Dobberman"; // piorou né?
d.destruir(); // agora é que destruiu tudo
exibirMe(); // blz. aqui tudo bem.
}


Vamos fazer apenas mais uns poucos comentários para encerrar essa seção. Dog definiu dois membros privados, um método e uma variável de instância. Esses membros só podem ser acessados por algum código que esteja dentro do escopo (entre as chaves) da classe Dog, e por ninguém mais. Então eu nem preciso falar que a classe Dobberman não herdará os membros né? Vamos pular então pra classe Canil, ela instância um objeto Dog e um Dobberman, e em seguida tenta acessar seus membros privados, o que obviamente ocasionará em um erro de compilação, pois estes não são acessíveis a partir de outra classe. Se porém, contudo, todavia a classe Canil pudesse ser compilada, o método exibirMe poderia ser chamado sem problemas, pois apesar de ele ser privado, o acesso está sendo feito dentro da classe na qual ele foi declarado.

Então é isso. Sobre membros privados não há mais o que dizer, pelo menos não por enquanto (calma, depois falaremos sobre inner classe e você verá que é possível acessar membros privados a partir de outra classe... mas esqueça isso por enquanto).
Então se liga aí que é hora da revisão:

public -> acessível a partir de qualquer classe em qualquer pacote.
protected -> acessível a partir de qualquer classe no mesmo pacote e por outras classes em outros pacotes através de herança.
default -> acessível a partir de qualquer classe no mesmo pacote.
private -> acessível somente a partir da classe que o declarou.

Até o próximo post.

Nenhum comentário:

Postar um comentário