Java

Thursday, April 06, 2006

 

Modificadores de Acesso

Java fornece 4 modificadores de acesso: public, protected, private e default. Se uma variável de instância z é delcarada como public na classe X, então ela pode ser acessada por qualquer outro objeto que tenha a referência para uma instância de X, estando ambas as classes no mesmo pacote ou não. As classes que estendem X também herdam a variável de instância z. default é o modo de acesso padrão de uma instância de variável, não há uma palavra reservada para ele. Se uma variável de instância tem esse tipo de acesso, então somente classes e subclasses do mesmo pacote terão acesso a esta variável. Se uma subclasse de outro pacote estender X, ela nao terá uma variável de instância z. Nisto o protected se diferencia do default. Se z é declarada como protected, então uma classe K de outro pacote pode estender X e ela terá uma variável de instância z. Mas agora vem um dado importante. Esta variável z em K terá a modalidade de acesso private. Por fim, se uma variável de instância z é declarada como privada, então nenhuma outra classe tem acesso a ela, nem mesmo as subclasses do mesmo pacote. Vejamos o seguinte exemplo:


package com;
public class X{
protected int z;
}

package com2;

import com.*;

public class K extends X{
public static void main(String args[]){
X x = new X();
K k = new K();
W w = new W();
System.out.println(x.z);
System.out.println(k.z);
System.out.println(w.k.z);
}
}

package com2;

import com.*;

public class W {
K k;
public W(){
k = new K();
}

public void test(){
System.out.println(k.z);
}
}

O compilador vai acusar z has protected access in com.X em dois momentos. Ao tentar compilar o comando System.out.println(k.z) do método test() de W, e ao tentar compilar o comando System.out.println(x.z) do método main() de K. Embora K estenda X, em K, só podemos acessar z através de herança, ou seja, através de uma instância de K, já que K e X não estão no mesmo pacote. Por outro lado, em W, não podemos acessar a variável de instância z de um objeto K, pois agora essa variável tem acesso privado, muito embora ela tenha sido declarada como protected em X. Em K, no entando, podemoz acessar z por meio de w.k.z, pois dentro de K, z é visível por meio de uma instância de K e w.k é uma instância de K. Por isso, o comando System.out.println(w.k.z) no main() de K não gera erro de compilação.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?