Curso de Java

Aprende Java de una buena vez

gratis
texto

Modificadores de acceso public, protected, default y private en Java. Encapsulamiento en Java

Los modificadores de acceso nos introducen al concepto de encapsulamiento. El encapsulamiento busca de alguna forma controlar el acceso a los datos que conforman un objeto o instancia, de este modo podríamos decir que una clase y por ende sus objetos que hacen uso de modificadores de acceso (especialmente privados) son objetos encapsulados.

Los modificadores de acceso permiten dar un nivel de seguridad mayor a nuestras aplicaciones restringiendo el acceso a diferentes atributos, métodos, constructores asegurándonos que el usuario deba seguir una "ruta" especificada por nosotros para acceder a la información.

Es muy posible que nuestras aplicaciones vayan a ser usadas por otros programadores o usuarios con cierto nivel de experiencia; haciendo uso de los modificadores de acceso podremos asegurarnos de que un valor no será modificado incorrectamente por parte de otro programador o usuario. Generalmente el acceso a los atributos se consigue por medio de los métodos get y set, pues es estrictamente necesario que los atributos de una clase sean privados.

Nota: Siempre se recomienda que los atributos de una clase sean privados y por tanto cada atributo debe tener sus propios métodos get y set para obtener y establecer respectivamente el valor del atributo.

Nota 2: Siempre que se use una clase de otro paquete, se debe importar usando import. Cuando dos clases se encuentran en el mismo paquete no es necesario hacer el import pero esto no significa que se pueda acceder a sus componentes directamente.

Veamos un poco en detalle cada uno de los modificadores de acceso

Modificador de acceso private

El modificador private en Java es el más restrictivo de todos, básicamente cualquier elemento de una clase que sea privado puede ser accedido únicamente por la misma clase por nada más. Es decir, si por ejemplo, un atributo es privado solo puede ser accedido por lo métodos o constructores de la misma clase. Ninguna otra clase sin importar la relación que tengan podrá tener acceso a ellos.

package aap.ejemplo1; public class Ejemplo1 { private int atributo1;//Este atributo es privado private int contador = 0; //Contador de registro //Si un atributo es privado podemos crear método get y set ... //... para éste y permitir el acceso a él desde otras instancias public void setAtributo1(int valor) { contador++;//Contador que lleva el registro de ediciones del atributo1 atributo1 = valor;//Establecemos el valor del atributo } public int getAtributo1() { return atributo1;//Retornamos el valor actual del atributo } //Get para el contador public int getContador() { return contador; } //Notar que no ponemos un set, pues no nos interesa que el contador pueda ser cambiado. }

En el ejemplo anterior vemos lo que mencioné al comiendo, tenemos un atributo privado y permitimos el acceso a él únicamente por medio de los métodos de get y set, notemos que estos métodos son públicos y por tanto cualquiera puede accederlos. Lo realmente interesante con los métodos get y set es que nos permiten realizar cualquier operación como por ejemplo llevar una cuenta de la veces que se estableció el valor para el atributo permitiéndonos mantener nuestro sistema sin problemas. También debemos notar que debido a que los métodos get y set son propios de la clase no tienen problemas con acceder al atributo directamente.

El modificador por defecto (default)

Java nos da la opción de no usar un modificador de acceso y al no hacerlo, el elemento tendrá un acceso conocido como defaulto acceso por defecto que permite que tanto la propia clase como las clases del mismo paquete accedan a dichos componentes (de aquí la importancia de declararle siempre un paquete a nuestras clases).

package aap.ejemplo2; public class Ejemplo2 { private static int atributo1;//Este atributo es privado static int contador = 0; //Contador con acceso por defecto public static void setAtributo1(int valor) { contador++;//Contador que lleva el registro de ediciones del atributo1 atributo1 = valor;//Establecemos el valor del atributo } public static int getAtributo1() { return atributo1;//Retornamos el valor actual del atributo } } package aap.ejemplo2; public class Ejemplo2_1 { public static int getContador() { return Ejemplo2.contador;//Accedemos directamente al contador desde otra clase } }

Modificador de acceso protected

El modificador de acceso protected nos permite acceso a los componentes con dicho modificador desde la misma clase, clases del mismo paquete y clases que hereden de ella (incluso en diferentes paquetes). Veamos:

package aap.ejemplo3; public class Ejemplo3 { protected static int atributo1;//Atributo protected private static int atributo2; //Atributo privado int atributo3;//Atributo por default public static int getAtributo2() { return atributo2; } } package aap.ejemplo3_1; import aap.ejemplo3.Ejemplo3;//Es necesario importar la clase del ejemplo 3 public class Ejemplo3_1 extends Ejemplo3 { public static void main(String[] args) { //La siguientes dos líneas generan error, pues atributo2 es privado y atributo 3 es default //System.out.println(atributo2); //System.out.println(atributo3); System.out.println(atributo1);//Sí tenemos acceso a atributo1 } }

Modificador public

El modificador de acceso public es el más permisivo de todos, básicamente public es lo contrario a private en todos los aspectos (lógicamente), esto quiere decir que si un componente de una clase es public, tendremos acceso a él desde cualquier clase o instancia sin importar el paquete o procedencia de ésta.

package aap.ejemplo4; public class Ejemplo4 { public static int atributo1; //Atributo publico public static void metodo1() { System.out.println("Método publico"); } } package paquete.externo; import aap.ejemplo4.Ejemplo4; //importamos la clase del ejemplo4 public class ClaseExterna { public static void main(String[] args) { System.out.println(Ejemplo4.atributo1); //Tuvimos Acceso directo por ser publico Ejemplo4.metodo1(); //Metodo1 también es publico } }

A continuación y ya para finalizar, pondré una pequeña tabla que resume el funcionamiento de los modificadores de acceso en Java.

Modificador La misma clase Mismo paquete Subclase Otro paquete
private No No No
default No No
protected Sí/No No
public

Debo aclarar algo en el caso del modificador de acceso protected y el acceso desde suclases. Es un error común pensar que se puede crear un objeto de la clase madre y luego acceder al atributo con acceso protected sin problemas, sin embargo esto no es cierto, puesto que el modificador protected lo que nos permite es acceder al atributo heredado desde el ámbito de la clase hija y no directamente. Sé que esto es un poco confuso así que te invito a ver el video explicativo al final de esta sección para quedar más claros.

Eso ha sido todo en esta sección, no te olvides de dejar tus comentarios y de suscribirte a nuestras redes sociales para estar al tanto de las novedades en el sitio.

La última actualización de este artículo fue hace 5 meses

Imagen descriptiva de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

Lo que dicen los estudiantes

Genial el ambiente que genera la pagina. Simple, rápido, fácil y al alcance de cualquiera.¡Sigan así cracks!

Fran Garassi

Visitante del sitio ProgramarYa.com

Demoramos mucho para llegar al desarrollo. Aunque la maquina virtual es necesaria son muchos videos. De ahí en fuera está muy bien

Benjamin Ortiz

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

¡De lo mejor! Saludos desde México, está super bien todo, claro y preciso. Lo mejor es que se usen ejemplos. ¡Mejor que algunos profesores que me han tocado!

Rodrigo Enciso

Visitante de PrograarYa.com

Habiendo visto el 100% del curso puedo decir que es muy bueno de acuerdo a lo propuesto, cumple con las expectativas.

Holmans Correa

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Estoy muy contento por haber terminado este curso. Estoy aplicando lo aprendido a mis proyectos y quedo totalmente satisfecho. Un curso 100% recomendable.

Jesus Romero

Estudiante del curso "VPS Seguro con DigitalOcean, Nginx, Letsencrypt Ubuntu 14.04"

Wuau, entendí más en una hora leyendo esto que en todo el semestre con la maestra de informática.

Valeria Sybelle

Visitante del sitio ProgramarYa.com

Muy detallado y claras las explicaciones. Muchas gracias!

Sr. Erick Evencio

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Muchas gracias me has ayudado a quitar mis dudas de qué es For While, if y switch. Esto me ayudara también a mi tarea.

Len Garcia

Visitante del sitio ProgramarYa.com

Muy buen programador, dominas la POO como en ninguno otro curso, el uso de traits en el proyecto es una delicia.

Sergio Larracoechea

Estudiante del curso "APIs RESTful con Laravel"

Buenas explicaciones y temario interesante.

Leonardo Quimpos

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

El curso es bueno, pero siempre explica demasiado rápido

E-Contact

Estudiante del curso " Aprende Laravel: Crea un Gestor de Fotos con Laravel y PHP"

Estuve un semestre sin programar y me siento bastante perdida. Espero que este curso me ayude a ponerme de nuevo al corriente.

Fernanda Sanchez

Visitante del sitio ProgramarYa.com

Muy buena presentación pedagógica, pues nos quita el miedo a la programación. Yo entiendo que ésta tiene como objetivo facilitar el manejo de procesos que serían, demasiado complejos.

Jairo Ibarbo

Visitante del sitio ProgramarYa.com

Muy bien explicado. Contenido muy actualizado.

Santiago Zuluaga

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Buena didáctica y redacción, espero más contenidos en los siguientes capítulos.

Juan Razo Ruiz

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Hice muchos ejercicios y aquí logré comprender lo que realmente estaba haciendo. Llegó un momento en que dejó de gustarme la programación, pero con estos textos, recuperé la motivación. Buen trabajo.

Demetrio Cumplido

Visitante del sitio ProgramarYa.com

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

¡Ups! {{subscriberErrorMessage}}

Si te parece bien, te enviaré, de vez en cuando, mensajes de interés sobre los temas que se tratan en sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encontrabas.

Además, puedes eliminar tu suscripción en cualquier momento.