Modificador protected en Java: ¿qué es y para qué sirve?

| Última modificación: 1 de agosto de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

La programación orientada a objetos ha sido uno de los más bellos descubrimientos en el mundo del desarrollo, especialmente porque nos ayuda a gestionar la visibilidad y control de acceso a clases u otros elementos que son de vital importancia para la seguridad de nuestro código.

Java es uno de esos lenguajes en el que la POO es vital y de ahí que los modificadores de acceso, como el protected en Java, sean indispensables en el proceso de desarrollo. Por esta razón, el día de hoy te contaremos en qué consiste el protected en Java y cómo usarlo.

protected en Java

¿Qué es el modificador protected en Java?

El protected en Java es un modificador usado para restringir el acceso a los miembros de una clase, (es decir, los campos, métodos y constructores), a las subclases y a otras clases que se encuentren en el mismo paquete.

Existen diferentes modificadores de acceso en Java, los más populares son el public, el protected y el private. El public permite el acceso desde cualquier parte; el private restringe el acceso solo a la clase en donde se declare; el protected es el punto intermedio entre ambos.

Esta tabla comparativa nos lo muestra más en detalle:

ModificadorClasePaqueteSubclaseTodos
public
protectedNo
No especificadoNoNo
privateNoNoNo
Niveles de acceso que ofrecen cada uno de los modificadores.

¿Para qué sirve el modificador protected en Java?

El modificador protected en Java puede sernos de gran utilidad cuando trabajamos con herencias, ya que permite a las subclases acceder a los miembros de la superclase, lo cual se convierte en tarea de gran importancia en el proceso de reutilización de código. Algunas de las formas en las que podemos utilizar el protected en Java son:

Acceso desde el mismo paquete

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Supongamos que tenemos una clase PrimeraClase con un campo protegido:

public class PrimeraClase {
protected String nombre;

protected PrimeraClase(String nombre) {
this.nombre = nombre;
}

protected String getNombre() {
return nombre;
}
}

Si declaramos otra clase en el mismo paquete, podremos acceder a los miembros protegidos de PrimeraClase:

public class ClaseGenerica {
public static void main(String[] args) {
PrimeraClase primera = new PrimeraClase("Lorenzo Lamas");
System.out.println("El nombre de PrimeraClase es: " + primera.getNombre());
primera.nombre = "El Renegado";
}
}

Acceso desde una subclase

Ahora, supongamos que tenemos una subclase SegundaClase que extiende PrimeraClase:

public class SegundaClase extends PrimeraClase {

public SegundaClase(String nombre) {
super(nombre);
System.out.println("El nombre de SegundaClase es: " + this.getNombre());
this.nombre = "Bel Air Prince";
}
}

En este caso, SegundaClase puede acceder a los miembros protegidos de PrimeraClase porque hereda de ella.

Limitaciones del modificador protected

Aunque protected proporciona un acceso flexible, también tiene algunas limitaciones. Por ejemplo, no podemos acceder a miembros protegidos desde una clase que no está en el mismo paquete y no es una subclase. Veamos este ejemplo:

public class ClaseGenerica {
public static void main(String[] args) {
PrimeraClase primera = new PrimeraClase("Melissa Joan Hart");
System.out.println("El nombre de PrimeraClase es: " + primera.getNombre());
primera.nombre = "Clarissa Lo Explica Todo";
}
}

Este código dará error de compilación si ClaseGenerica no está en el mismo paquete que PrimeraClase.

Veamos un ejemplo

Ahora, para entender mejor el protected en Java, recurramos a un ejemplo más práctico. Imagina que estás desarrollando un programa para gestionar profesores y tienes una superclase Profesor y una subclase ProfesorEmerito:

public class Profesor {
protected String nombre;
protected int edad;
protected int añosConsolidados;

protected Profesor(String nombre, int edad, int añosConsolidados) {
this.nombre = nombre;
this.edad = edad;
this.añosConsolidados = añosConsolidados;
}
}

public class ProfesorEmerito extends Profesor {
private int añosEmerito;

public ProfesorEmerito(String nombre, int edad, int añosConsolidados, int añosEmerito) {
super(nombre, edad, añosConsolidados);
this.añosEmerito = añosEmerito;
}

public double obtenerSalarioBase() {
return 925 + añosConsolidados * 33.25 + 47.80 * añosEmerito;
}
}

En este caso de aplicación, los campos nombre, edad y añosConsolidados están declarados como protected, esto permite que ProfesorEmerito acceda a ellos directamente, lo cual a su vez facilita la implementación de métodos en la subclase sin necesidad de utilizar getters o setters adicionales.

Como viste, protected en Java es un modificador que puede ser de gran utilidad en múltiples implementaciones. Si te picó el bichito de la curiosidad y quieres seguir aprendiendo sobre los secretos de Java, uno de los lenguajes de programación más famosos de todos los tiempos, únete al bootcamp de programación en Java que tenemos para ti, en el cual te instruiremos acerca de las mejores prácticas en este lenguaje y te podrás adentrar en el mejor mercado laboral de la actualidad. ¡No pierdas esta gran oportunidad!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.