Modificadores de acceso en Java: Tipos, reglas y ejemplos prácticos
Modificadores de acceso en Java
Este tutorial explora los modificadores de acceso en Java, sus cuatro tipos y demuestra su uso mediante ejemplos claros.
¿Qué son los modificadores de acceso?
En Java, los modificadores de acceso definen la visibilidad de clases, interfaces, variables, métodos, constructores y miembros de datos. Por ejemplo:
class Animal { public void metodo1() {...} private void metodo2() {...} }
En el ejemplo anterior, metodo1 es public – accesible desde cualquier clase. metodo2 es private – restringido a la clase contenedora.
Estas palabras clave – public y private – son los modificadores de visibilidad fundamentales en Java.
Tipos de modificadores de acceso
Antes de profundizar en los modificadores, asegúrate de comprender los paquetes de Java.
Java ofrece cuatro modificadores de visibilidad principales:
| Modificador | Descripción |
|---|---|
| Default (package‑private) | Visible solo dentro del mismo paquete. |
| Private | Visible únicamente dentro de la clase declarativa. |
| Protected | Visible dentro del paquete y para subclases en otros paquetes. |
| Public | Visible en todas partes. |
Modificador de acceso Default
Cuando no se especifica ningún modificador, Java aplica la visibilidad default (package‑private). Por ejemplo:
package paqueteDefault; class Logger { void mensaje() { System.out.println("Este es un mensaje"); } }
La clase Logger es accesible solo para clases dentro de paqueteDefault. Usarla desde otro paquete resulta en un error de compilación.
Modificador de acceso Private
Declarar un miembro como private confina su acceso a la clase contenedora:
class Dato { private String nombre; } public class Main { public static void main(String[] args) { Dato d = new Dato(); d.nombre = "Programiz"; // ❌ error en tiempo de compilación } }
El error ocurre porque nombre es privado para Dato. Para exponerlo de forma segura, proporciona métodos de acceso:
class Dato { private String nombre; public String getNombre() { return this.nombre; } public void setNombre(String nombre) { this.nombre = nombre; } } public class Main { public static void main(String[] args) { Dato d = new Dato(); d.setNombre("Programiz"); System.out.println(d.getNombre()); } }
Salida:
El nombre es Programiz
Ten en cuenta que las clases anidadas pueden declararse private, pero las clases e interfaces de nivel superior no.
private.Modificador de acceso Protected
Los miembros marcados protected son visibles dentro del mismo paquete y para subclases en otros paquetes. Ejemplo:
class Animal { protected void mostrar() { System.out.println("Soy un animal"); } } class Perro extends Animal { public static void main(String[] args) { Perro perro = new Perro(); perro.mostrar(); // ✅ permitido } }
Salida:
Soy un animal
Los miembros protected no pueden declararse en clases o interfaces de nivel superior.
protected.Modificador de acceso Public
Los miembros declarados public son universalmente accesibles:
// Animal.java public class Animal { public int numeroPatas; public void mostrar() { System.out.println("Soy un animal."); System.out.println("Tengo " + numeroPatas + " patas."); } } // Main.java public class Main { public static void main(String[] args) { Animal animal = new Animal(); animal.numeroPatas = 4; animal.mostrar(); } }
Salida:
Soy un animal. Tengo 4 patas.
Resumen: Animal (clase pública), numeroPatas (campo público) y mostrar() (método público) son todos accesibles desde Main.
Modificadores de acceso resumidos en una figura

Los modificadores de acceso sustentan la encapsulación, permitiendo a los desarrolladores controlar la visibilidad y proteger la integridad de los datos. Para más información sobre encapsulación, consulta Encapsulación en Java.
Java
- Entendiendo los modificadores de acceso en C#: Public, Private, Protected, Internal y más
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Comentarios en Java: Tipos, Uso y Mejores Prácticas
- Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
- Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
- Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
- Entendiendo Java Vector: Uso, Características y Comparación con ArrayList