Menu
Coddy logo textTech

Visión general de los niveles de acceso

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 10 de 87.

Los modificadores de acceso controlan desde dónde se puede acceder a los campos y métodos. Java tiene cuatro niveles de control de acceso.

ModificadorMisma claseMismo paqueteSubclaseEn todos lados
privateNoNoNo
default (sin palabra clave)NoNo
protectedNo
public
public class BankAccount {
    private double balance;      // Solo esta clase
    String accountType;          // Predeterminado: solo el mismo paquete
    protected String owner;      // Mismo paquete + subclases
    public String bankName;      // Accesible desde cualquier lugar
}

private es el más restrictivo - úsalo para datos internos que nunca deberían ser accedidos directamente. public es el más abierto - úsalo para métodos que otras clases necesiten llamar.

Cuando no especificas ningún modificador, Java utiliza el acceso default (también llamado package-private). Esto permite el acceso solo dentro del mismo paquete.

class Helper {           // Clase con acceso predeterminado
    void assist() { }    // Método con acceso predeterminado
}

Elige el nivel de acceso más restrictivo que aún permita que tu código funcione. Esto protege tus datos y hace que tu código sea más fácil de mantener.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de registro de Student que demuestre cómo los modificadores de acceso controlan la visibilidad a través de diferentes archivos.

Crearás dos archivos para organizar tu código:

  • Student.java: Define una clase Student con campos que utilicen diferentes niveles de acceso:
    • Campo private: studentId (String) - solo accesible dentro de la clase Student
    • Campo por defecto (sin modificador): grade (int) - accesible dentro del mismo paquete
    • Campo protected: name (String) - accesible en el mismo paquete y subclases
    • Campo public: school (String) - accesible en todas partes
    Incluye un constructor que establezca los cuatro campos, y un método public llamado getInfo() que devuelva una cadena con el formato: "[studentId] name - Grade grade at school"
  • Main.java: Crea un objeto Student y demuestra qué campos pueden ser accedidos directamente desde fuera de la clase. Imprime el campo school directamente, luego imprime el resultado de getInfo() para mostrar toda la información del estudiante.

Recibirás cuatro entradas: studentId, name, grade, y school (en ese orden).

Tu salida debe constar de dos líneas: el nombre de la escuela accedido directamente, seguido de la información completa del estudiante obtenida del método getInfo().

Hoja de referencia

Los modificadores de acceso controlan desde dónde se puede acceder a los campos y métodos. Java tiene cuatro niveles de control de acceso:

ModificadorMisma ClaseMismo PaqueteSubclaseEn todas partes
privateNoNoNo
default (sin palabra clave)NoNo
protectedNo
public
public class BankAccount {
    private double balance;      // Solo esta clase
    String accountType;          // Default: solo el mismo paquete
    protected String owner;      // Mismo paquete + subclases
    public String bankName;      // Accesible en todas partes
}

private es el más restrictivo: úsalo para datos internos a los que nunca se debe acceder directamente. public es el más abierto: úsalo para métodos que otras clases necesiten llamar.

Cuando no especificas ningún modificador, Java utiliza el acceso default (también llamado package-private), que permite el acceso solo dentro del mismo paquete:

class Helper {           // Clase con acceso default
    void assist() { }    // Método con acceso default
}

Elige el nivel de acceso más restrictivo que permita que tu código funcione. Esto protege tus datos y hace que tu código sea más fácil de mantener.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int grade = Integer.parseInt(scanner.nextLine());
        String school = scanner.nextLine();
        
        // TODO: Crear un objeto Student con los valores de entrada
        
        
        // TODO: Imprimir el campo school directamente (accesible porque es público)
        
        
        // TODO: Imprimir el resultado de getInfo() para mostrar toda la información del estudiante
        
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos