Este artigo apresenta um dos elementos mais fundamentais do Java: o controle de acesso. A princípio será feito uma breve revisão sobre os conceitos básicos. Veremos uma descrição sobre os modificadores de acesso e onde utilizá-los. Em seguida serão mostrados quais modificadores se aplicam às classes e aos membros das classes, e depois serão apresentados exemplos sobre como funciona cada modificador.
Classes e membros
Uma classe é um molde do qual podemos criar objetos. Definimos na classe o comportamento e os estados que terá o objeto do seu tipo. A classe pode e geralmente representa coisas do mundo real, como por exemplo, um carro.
Por exemplo, uma montadora de carros cria um novo modelo, então ele é reproduzido em série. Na orientação a objetos, a classe é o modelo que o projetista do carro criou. As unidades do carro produzidas na fábrica são os objetos, pois seguem as especificações do modelo. As características do carro são os tipos de estado daquele objeto. A cor, combustível e outras características podem variar de carro para carro, mesmo sendo do mesmo modelo. Na classe esses tipos de estado são definidos pelas variáveis. O comportamento do carro são suas ações, como: acelerar, frear, trocar macha, etc. O comportamento da classe é definido pelos seus métodos. Então por serem considerados os principais componentes de uma classe, as variáveis e métodos são conhecidos como membros da classe.
Todo programa Java é composto por uma coleção de objetos que podem se comunicar entre si chamando métodos uns dos outros. Além disso, cada objeto tem seu tipo, e o que determina o tipo do objeto é a classe da qual ele foi instanciado. Os objetos são criados quando uma classe é instanciada, o que faz com que um novo modelo da classe fique disponível na memória. Então podemos atribuir valores às suas variáveis e chamar seus métodos.
Em Java as classes são organizadas em pacotes, e cada pacote pode ter nenhuma ou várias classes. Separar as classes de acordo com sua funcionalidade é uma forma de organizar o projeto. Mesmo estando em pacotes separados, as classes podem ser importadas de um pacote para outro dependendo da sua visibilidade. Também podem ocorrer casos em que algumas ou todas as classes não estejam em nenhum pacote, embora isso não seja uma boa prática.
Em um programa podemos desejar que as classes de um pacote não possam ser acessadas pelas classes de outro, ou então que determinada variável fique restrita somente ao escopo da sua classe. Para definir este tipo de acesso é que usamos os modificadores de acesso.
Modificadores de acesso
Os modificadores de acesso são palavras-chave na linguagem Java. Eles servem para definir a visibilidade que determinada classe ou membro terá diante das outras. Visibilidade neste caso tem o mesmo significado que acesso, pois se não está visível não pode ser acessado. Para entender como o controle de acesso é feito, primeiramente devemos estudar dois conceitos: níveis de acesso e modificadores de acesso. Níveis de acesso são conhecidos por public, private, protected e default. E os modificadores são apenas três: public, private, protected. O nível de acesso default (padrão) não exige modificador. Quando não se declara nenhum modificador, o nível default é implícito.
Para entender como os modificadores trabalham, devemos imaginar a classe ou membros inseridos no ambiente do programa, onde podem existir outras classes e membros. Por exemplo, temos um projeto e nele podemos ter vários pacotes. E cada pacote pode conter várias classes. Então na visão de uma classe, ela está inserida num pacote que está dentro do projeto (veja a Figura 1).
Basicamente, temos três casos em que podemos definir como as classes e membros poderão ser acessados:
- Quando o membro deverá ser acessível somente por sua classe. Então ele estará disponível somente no nível da classe. O acesso pelas outras classes, ainda que no mesmo pacote, será negado;
- Quando o membro ou classe deverá ficar acessível por outras classes do mesmo pacote, neste caso, em nível de pacote; ...