DEV Community

Pacotes e o Acesso a Membros

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

Image description

Image description

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

  1. 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();
    }
}

Enter fullscreen mode Exit fullscreen mode
  1. 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();
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

Estrutura de Diretórios para Compilação e Execução

src/
|-- bookpack/
|   |-- Book.java
|
|-- bookpackext/
|   |-- UseBook.java

Enter fullscreen mode Exit fullscreen mode

Passos para Compilar e Executar:
Compilar a classe Book:

javac src/bookpack/Book.java

Enter fullscreen mode Exit fullscreen mode

Compilar a classe UseBook a partir do diretório src:

javac src/bookpackext/UseBook.java

Enter fullscreen mode Exit fullscreen mode

Executar UseBook:

java -cp src bookpackext.UseBook

Enter fullscreen mode Exit fullscreen mode

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)