En este tutorial, aprenderemos sobre Java Access Modifier, sus tipos y cómo usarlos con la ayuda de ejemplos.
¿Qué son los modificadores de acceso?
En Java, los modificadores de acceso se utilizan para establecer la accesibilidad (visibilidad) de clases, interfaces, variables, métodos, constructores, miembros de datos y los métodos de establecimiento. Por ejemplo,
class Animal ( public void method1() (… ) private void method2() (… ) )
En el ejemplo anterior, hemos declarado 2 métodos: método1 () y método2 (). Aquí,
- method1 is
public
- Esto significa que otras clases pueden acceder a él. - method2 is
private
- Esto significa que otras clases no pueden acceder a él.
Tenga en cuenta la palabra clave public
y private
. Estos son modificadores de acceso en Java. También se conocen como modificadores de visibilidad.
Nota : no puede establecer el modificador de acceso de los métodos getters.
Tipos de modificadores de acceso
Antes de aprender sobre los tipos de modificadores de acceso, asegúrese de conocer los paquetes Java.
Hay cuatro palabras clave de modificadores de acceso en Java y son:
Modificador | Descripción |
Defecto | las declaraciones son visibles solo dentro del paquete (paquete privado) |
Privado | las declaraciones son visibles solo dentro de la clase |
Protegido | las declaraciones son visibles dentro del paquete o en todas las subclases |
Público | las declaraciones son visibles en todas partes |
Modificador de acceso predeterminado
Si no especificamos explícitamente ningún modificador de acceso para clases, métodos, variables, etc., entonces, por defecto, se considera el modificador de acceso predeterminado. Por ejemplo,
package defaultPackage; class Logger ( void message()( System.out.println("This is a message"); ) )
Aquí, la clase Logger tiene el modificador de acceso predeterminado. Y la clase es visible para todas las clases que pertenecen al paquete defaultPackage. Sin embargo, si intentamos usar la clase Logger en otra clase fuera de defaultPackage, obtendremos un error de compilación.
Modificador de acceso privado
Cuando se declaran variables y métodos private
, no se puede acceder a ellos fuera de la clase. Por ejemplo,
class Data ( // private variable private String name; ) public class Main ( public static void main(String() main)( // create an object of Data Data d = new Data(); // access private variable and field from another class d.name = "Programiz"; ) )
En el ejemplo anterior, hemos declarado una variable privada denominada nombre y un método privado denominado display()
. Cuando ejecutamos el programa, obtendremos el siguiente error:
Main.java:18: error: name has private access in Data d.name = "Programiz"; ^
El error se genera porque estamos intentando acceder a la variable privada y al método privado de la clase Data desde la clase Main.
Quizás se pregunte qué pasa si necesitamos acceder a esas variables privadas. En este caso, podemos usar el método getters y setters. Por ejemplo,
class Data ( private String name; // getter method public String getName() ( return this.name; ) // setter method public void setName(String name) ( this.name= name; ) ) public class Main ( public static void main(String() main)( Data d = new Data(); // access the private variable using the getter and setter d.setName("Programiz"); System.out.println(d.getName()); ) )
Salida :
El nombre es Programiz
En el ejemplo anterior, tenemos una variable privada llamada name. Para acceder a la variable desde la clase externa, hemos utilizado los métodos: getName()
y setName()
. Estos métodos se denominan getter y setter en Java.
Aquí, hemos utilizado el método setter ( setName()
) para asignar valor a la variable y el método getter ( getName()
) para acceder a la variable.
Hemos utilizado la this
palabra clave dentro de setName () para referirnos a la variable de la clase. Para obtener más información sobre esta palabra clave, visite Java this Keyword.
Nota : No podemos declarar clases e interfaces privadas en Java. Sin embargo, las clases anidadas pueden declararse privadas. Para obtener más información, visite Java Nested and Inner Class.
Modificador de acceso protegido
Cuando se declaran métodos y miembros de datos protected
, podemos acceder a ellos dentro del mismo paquete, así como desde subclases. Por ejemplo,
class Animal ( // protected method protected void display() ( System.out.println("I am an animal"); ) ) class Dog extends Animal ( public static void main(String() args) ( // create an object of Dog class Dog dog = new Dog(); // access protected method dog.display(); ) )
Salida :
Soy un animal
En el ejemplo anterior, tenemos un método protegido llamado display()
dentro de la clase Animal. La clase Animal es heredada por la clase Dog. Para obtener más información sobre la herencia, visite Herencia de Java.
Luego creamos un perro objeto de la clase Perro. Usando el objeto intentamos acceder al método protegido de la clase padre.
Dado que se puede acceder a los métodos protegidos desde las clases secundarias, podemos acceder al método de la clase Animal desde la clase Dog.
Nota : No podemos declarar clases o interfaces protected
en Java.
Modificador de acceso público
Cuando se declaran métodos, variables, clases, etc. public
, podemos acceder a ellos desde cualquier lugar. El modificador de acceso público no tiene restricción de alcance. Por ejemplo,
// Animal.java file // public class public class Animal ( // public variable public int legCount; // public method public void display() ( System.out.println("I am an animal."); System.out.println("I have " + legCount + " legs."); ) ) // Main.java public class Main ( public static void main( String() args ) ( // accessing the public class Animal animal = new Animal(); // accessing the public variable animal.legCount = 4; // accessing the public method animal.display(); ) )
Salida :
Soy un animal Tengo 4 patas.
Aquí,
- Se accede a la clase pública Animal desde la clase Main.
- Se accede a la variable pública legCount desde la clase Main.
- Se
display()
accede al método público desde la clase Main.
Modificadores de acceso resumidos en una figura

Los modificadores de acceso se utilizan principalmente para la encapsulación. Puedo ayudarnos a controlar qué parte de un programa pueden acceder a los miembros de una clase. Para evitar el mal uso de los datos. Para obtener más información sobre la encapsulación, visite Encapsulación de Java.