Menu
Coddy logo textTech

Visão Geral dos Níveis de Acesso

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 10 de 87.

Modificadores de acesso controlam de onde campos e métodos podem ser acessados. O Java possui quatro níveis de controle de acesso.

ModificadorMesma ClasseMesmo PacoteSubclasseEm todos os lugares
privateSimNãoNãoNão
padrão (sem palavra-chave)SimSimNãoNão
protectedSimSimSimNão
publicSimSimSimSim
public class BankAccount {
    private double balance;      // Apenas esta classe
    String accountType;          // Padrão: apenas o mesmo pacote
    protected String owner;      // Mesmo pacote + subclasses
    public String bankName;      // Acessível em qualquer lugar
}

private é o mais restritivo - use-o para dados internos que nunca devem ser acessados diretamente. public é o mais aberto - use-o para métodos que outras classes precisam chamar.

Quando você não especifica nenhum modificador, o Java usa o acesso default (também chamado de package-private). Isso permite o acesso apenas dentro do mesmo pacote.

class Helper {           // Classe de acesso padrão
    void assist() { }    // Método de acesso padrão
}

Escolha o nível de acesso mais restritivo que ainda permita que seu código funcione. Isso protege seus dados e torna seu código mais fácil de manter.

challenge icon

Desafio

Fácil

Vamos construir um sistema de registro de Student que demonstra como os modificadores de acesso controlam a visibilidade em diferentes arquivos.

Você criará dois arquivos para organizar seu código:

  • Student.java: Defina uma classe Student com campos usando diferentes níveis de acesso:
    • Campo private: studentId (String) - acessível apenas dentro da classe Student
    • Campo padrão (sem modificador): grade (int) - acessível dentro do mesmo pacote
    • Campo protected: name (String) - acessível no mesmo pacote e subclasses
    • Campo public: school (String) - acessível em qualquer lugar
    Inclua um construtor que defina todos os quatro campos e um método public chamado getInfo() que retorne uma string no formato: "[studentId] name - Grade grade at school"
  • Main.java: Crie um objeto Student e demonstre quais campos podem ser acessados diretamente de fora da classe. Imprima o campo school diretamente e, em seguida, imprima o resultado de getInfo() para mostrar todas as informações do aluno.

Você receberá quatro entradas: studentId, name, grade e school (nessa ordem).

Sua saída deve ter duas linhas: o nome da escola acessado diretamente, seguido pelas informações completas do aluno do método getInfo().

Folha de consulta

Modificadores de acesso controlam de onde campos e métodos podem ser acessados. O Java possui quatro níveis de controle de acesso:

ModificadorMesma ClasseMesmo PacoteSubclasseEm qualquer lugar
privateSimNãoNãoNão
default (sem palavra-chave)SimSimNãoNão
protectedSimSimSimNão
publicSimSimSimSim
public class BankAccount {
    private double balance;      // Apenas esta classe
    String accountType;          // Padrão: apenas no mesmo pacote
    protected String owner;      // Mesmo pacote + subclasses
    public String bankName;      // Acessível em qualquer lugar
}

private é o mais restritivo - use-o para dados internos que nunca devem ser acessados diretamente. public é o mais aberto - use-o para métodos que outras classes precisam chamar.

Quando você não especifica nenhum modificador, o Java usa o acesso default (também chamado de package-private), que permite o acesso apenas dentro do mesmo pacote:

class Helper {           // Classe de acesso padrão
    void assist() { }    // Método de acesso padrão
}

Escolha o nível de acesso mais restritivo que ainda permita que seu código funcione. Isso protege seus dados e torna seu código mais fácil de manter.

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler as entradas
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: Criar um objeto Student com os valores de entrada
        
        
        // TODO: Imprimir o campo school diretamente (acessível porque é public)
        
        
        // TODO: Imprimir o resultado de getInfo() para mostrar todas as informações do aluno
        
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos