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.
| Modificador | Misma clase | Mismo paquete | Subclase | En todas partes |
|---|---|---|---|---|
private | Sí | No | No | No |
| predeterminado (sin palabra clave) | Sí | Sí | No | No |
protected | Sí | Sí | Sí | No |
public | Sí | Sí | Sí | Sí |
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: úselo para datos internos que nunca deberían ser accedidos directamente. public es el más abierto: úselo para métodos que otras clases necesiten llamar.
Cuando no especificas ningún modificador, Java utiliza el acceso predeterminado (también llamado privado del paquete). Esto permite el acceso únicamente 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.
Desafío
FácilConstruyamos un sistema de registros de Student que demuestre cómo los modificadores de acceso controlan la visibilidad entre diferentes archivos.
Crearás dos archivos para organizar tu código:
Student.java: Define una clase Student con campos que usan diferentes niveles de acceso:- Campo
private:studentId(String): solo es accesible dentro de la clase Student - Campo predeterminado (sin modificador):
grade(int): es accesible dentro del mismo paquete - Campo
protected:name(String): es accesible en el mismo paquete y en las subclases - Campo
public:school(String): es accesible desde cualquier lugar
publicllamadogetInfo()que devuelva una cadena con el formato:"[studentId] name - Grade grade at school"- Campo
Main.java: Crea un objeto Student y demuestra qué campos pueden ser accedidos directamente desde fuera de la clase. Imprime directamente el camposchooly, después, imprime el resultado degetInfo()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().
Pruébalo tú mismo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Leer las 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 public)
// TODO: Imprimir el resultado de getInfo() para mostrar toda la información del estudiante
}
}
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
1Fundamentos de OOP
Archivos externosIntroducción a la OOPClases vs. ObjetosLa palabra clave thisMétodosCampos (Atributos)Método constructorSobrecarga de constructoresResumen - Calculadora simple4Herencia
Herencia básica (extends)La palabra clave superSobrescritura de métodos (@Override)Encadenamiento de constructoresLa clase ObjectHerencia simple y multinivelPor qué no hay herencia múltiple de clasesResumen - Jerarquía de empleados7Métodos especiales y la clase Object
Método toString()equals() y hashCode()Método clone()compareTo() y ComparableInterfaz ComparatorResumen - Ordenamiento personalizado2Modificadores de acceso y encapsulamiento
Visión general de los niveles de accesoMétodos Getter y SetterOcultamiento de informaciónLa palabra clave finalResumen - Gestor de cuentas bancarias5Polimorfismo
Fundamentos de sobrecarga de métodosSobrescritura de métodos (tiempo de ejecución)Upcasting y DowncastingEl operador instanceofClases y métodos abstractosResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaAgregación vs. ComposiciónClases internas, anidadas y anónimasEnums y métodos de EnumRecords (Java 16+)Clases selladas (Java 17+)11Patrones de diseño - Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón BuilderPatrón ObserverPatrón Strategy3Propiedades de clase y miembros estáticos
Variables de instancia vs. estáticasMétodos estáticosBloques estáticosConstantes (static final)Repaso - Contador y utilidad6Interfaces y Clases Abstractas
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesMétodos Default y Static en InterfacesClases Abstractas vs InterfacesInterfaces FuncionalesResumen - Sistema de Pagos9Genéricos
Introducción a los genéricosClases genéricasMétodos genéricosParámetros de tipo delimitadosComodines (?, extends, super)Resumen - Contenedor genérico12Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón IteratorPractica por tu cuenta: Compilador de Java online