No exemplo apresentado, as classes Book e BookDemo pertenciam ao mesmo pacote, permitindo que BookDemo acessasse Book sem problemas, pois o acesso padrão concede visibilidade a todos os membros dentro do mesmo pacote.
No entanto, se as classes Book e BookDemo estivessem em pacotes diferentes, BookDemo não conseguiria acessar Book. Para permitir o uso de Book a partir de outros pacotes, é necessário fazer três mudanças na classe Book:
- Declarar a classe Book como public: isso torna a classe acessível fora do pacote bookpack.
- Tornar o construtor de Book público: isso permitirá criar instâncias de Book em outros pacotes.
- Declarar o método show() como público: assim, ele pode ser invocado fora do pacote bookpack.
Exemplo de Código: Book Tornada Pública
- Definindo a Classe Book no Pacote bookpack (arquivo: Book.java)
package bookpack;
// Agora a classe Book é pública para permitir o acesso a partir de outros pacotes.
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();
}
}
Exemplo: Acessando Book a partir de Outro Pacote
- Usando Book a partir do Pacote bookpackext (arquivo: UseBook.java) Neste exemplo, UseBook é uma classe localizada em um pacote diferente (bookpackext), e para usar Book, o nome da classe precisa ser qualificado com o nome completo do pacote (bookpack.Book).
// 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 o nome do pacote para acessá-la.
bookpack.Book books[] = new bookpack.Book[5];
// Cria uma lista 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();
}
}
}
Explicação das Alterações:
Qualificação da classe Book:
A classe Book é precedida pelo nome do pacote (bookpack.Book) para indicar ao compilador onde encontrar a definição da classe.
Sem essa qualificação, a classe UseBook não conseguiria localizar Book no pacote bookpack.
Alterações necessárias na classe Book:
Classe public: a declaração public class Book permite que Book seja acessível fora de seu pacote original.
Construtor public: torna possível criar objetos da classe Book a partir de outro pacote.
Método show() público: para que os detalhes dos livros possam ser exibidos fora do pacote bookpack.
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
Considerações:
Ao acessar uma classe pública de outro pacote, você pode usar o nome qualificado completo ou utilizar a instrução import para facilitar o uso da classe sem qualificar cada instância.
O exemplo mostra como a visibilidade de membros de classes (public, private, etc.) e a qualificação por pacote são usados para modularizar o código e controlar o acesso entre diferentes partes de um programa Java.
Top comments (0)