O controle de acesso no Java é mais complexo do que simplesmente usar public e private, pois também depende do pacote ao qual a classe pertence. Esse mecanismo combina a visibilidade dentro da classe e a visibilidade dentro do pacote, oferecendo níveis de acesso variados: private, public, protected e o acesso padrão (sem especificador).
Regras de Acesso:
public: visível em qualquer pacote.
private: acessível apenas dentro da classe.
protected: acessível dentro do pacote e também em subclasses de outros pacotes.
Acesso padrão: visível apenas dentro do mesmo pacote.
Tabela de Controle de Acesso a Membros de Classe
Exemplo: Controle de Acesso com Pacotes
Anteriormente, foi criado um pacote chamado bookpack que continha as classes Book e BookDemo. No exemplo abaixo, Book é modificada para ser acessível a partir de outros pacotes, e uma nova classe (UseBook) é criada em um pacote diferente (bookpackext).
Código Demonstrativo
- Definindo a Classe Book no Pacote bookpack (arquivo: Book.java):
package bookpack;
// Agora a classe Book é pública para ser acessada de fora do pacote.
public class Book {
private String title;
private String author;
private int pubDate;
// Construtor público
public Book(String t, String a, int d) {
title = t;
author = a;
pubDate = d;
}
// Método público para exibir os detalhes do livro
public void show() {
System.out.println(title);
System.out.println(author);
System.out.println(pubDate);
System.out.println();
}
}
- Usando Book a partir de um Pacote Diferente bookpackext (arquivo: UseBook.java):
// Esta classe está no pacote bookpackext.
package bookpackext;
// Usa a classe Book do pacote bookpack.
class UseBook {
public static void main(String args[]) {
// Qualifica a classe Book com seu pacote para utilizá-la.
bookpack.Book books[] = new bookpack.Book[5];
// Preenche a matriz de livros
books[0] = new bookpack.Book("Java: A Beginner's Guide", "Schildt", 2014);
books[1] = new bookpack.Book("Java: The Complete Reference", "Schildt", 2014);
books[2] = new bookpack.Book("The Art of Java", "Schildt and Holmes", 2003);
books[3] = new bookpack.Book("Red Storm Rising", "Clancy", 1986);
books[4] = new bookpack.Book("On the Road", "Kerouac", 1955);
// Exibe os detalhes de cada livro
for (int i = 0; i < books.length; i++) {
books[i].show();
}
}
}
Estrutura de Diretórios para Compilação e Execução
src/
|-- bookpack/
| |-- Book.java
|
|-- bookpackext/
| |-- UseBook.java
Passos para Compilar e Executar:
Compilar a classe Book:
javac src/bookpack/Book.java
Compilar a classe UseBook a partir do diretório src:
javac src/bookpackext/UseBook.java
Executar UseBook:
java -cp src bookpackext.UseBook
Explicações:
Classe Book:
Tornada pública (public class Book).
Construtor e método show() foram declarados como public para permitir o acesso a partir de outros pacotes.
Classe UseBook:
Está em um pacote diferente (bookpackext).
Acessa Book usando seu nome qualificado (bookpack.Book).
Sem essa qualificação, Book não seria reconhecida na compilação.
Considerações:
Quando uma classe pública reside em um pacote, ela deve ser referenciada pelo seu nome qualificado (nome do pacote + nome da classe).
Para facilitar o uso, a instrução import pode ser utilizada para trazer as classes públicas do pacote. Alternativamente, é possível qualificar cada referência (como em bookpack.Book).
Top comments (0)