quinta-feira, 3 de junho de 2010

Preparação para SCJP - Parte 1

Modificadores de acesso a classes:

Começaremos as discussões sobre a SCJP com este tópico:
Existem certos tópicos da linguagem Java que por não serem amplamente utilizados acabam sendo esquecidos pelos desenvolvedores. O problema é que estes tópicos são explorados nas provas de certificação da Sun. Um destes tópicos é justamente os modificadores de acesso das classes. Digo isso porque a maioria das classes tem o modificador de acesso "public". Mas este é o único modificador de acesso possível a uma classe? A resposta é não. Existe o modificador default que também pode ser atribuído a uma classe. Mas como isso funciona?

Modificador de acesso é uma forma que a linguagem Java tem de restringir o acesso a determinadas partes de código. Em classes, quer dizer que se pode restringir ou liberar acesso para que outras classes possam acessá-la através de instâncias ou herança (esses assuntos serão discutidos em outro post). Para classes existem dois modificadores aceitáveis:
-Public: modificador mais comum. Classes assinaladas com este modificador podem ser utilizadas por qualquer classe dentro do universo Java. Em cada arquivo ".java" só poderá existir uma classe public. Exemplo de sintaxe:

public class ClassePublica {
     // insira implementação da classe aqui
}

-Default: este modificador é mais restritivo que o modificador public. Ele diz que apenas as classes que estiverem no mesmo pacote que esta classe poderão ter acesso a ela. Exemplo de sintaxe:

class ClasseDefault {
     // insira implementação da classe aqui
}

Vamos desenhar um contexto:
Imagine que seu projeto tem dois pacotes: pacotea e pacoteb. Dentro do pacote "pacotea" criaremos duas classes: ClassePublica e ClasseDefault. Dentro do pacote "pacoteb", criaremos a classe "Main" e tentaremos fazer acesso às classes presentes no "pacotea". Acompanhe o código abaixo:

// Classe  pública dentro do pacotea
package pacotea;

public class ClassePublica {

}



// Classe com acesso default dentro do pacoteb
package pacotea;
// Note a ausência de um modificador de acesso. Indica modificador default!
class ClasseDefault {

}



// Classe que implementa uma instância de cada classe. Está em outro pacote.
package pacoteb;
// Note que esta classe está importando todas as classes do pacotea
import pacotea.*;

public class Main {

    public static void main(String[] args) {

        // Cria uma instância da classe com modificador público
        ClassePublica cp = new ClassePublica();

        // Tenta criar uma instância da classe com modificador default.
        ClasseDefault cd = new ClasseDefault();
    }

}



Caso você tente rodar este código, o compilador reclamará e exibirá um erro como este:
"The type ClasseDefault is not visible".

Agora, tente alterar o modificador de acesso da ClasseDefault para public e compile o projeto novamente. O erro desaparecerá!

Para desenvolvedores mais experientes, pode parecer bobo, mas é uma ótima pegadinha dentro de uma prova!

Pronto. Parte 1 concluída. Próximo post será sobre classes abstratas. See you guys!!!

Nenhum comentário:

Postar um comentário