logo

Modificadores de acceso en Java

En Java los modificadores de acceso son herramientas esenciales que definen cómo a los miembros de una clase les gustan los métodos variables e incluso se puede acceder a la clase misma desde otras partes de nuestro programa.

Hay 4 tipos de modificadores de acceso disponibles en Java: 

Modificadores-de-acceso-en-Java-1' title=Modificadores de acceso en Java

Modificador de acceso privado

El modificador de acceso privado se especifica mediante la palabra clave privado. Los métodos o miembros de datos declarados como privados sólo son accesibles dentro de la clase en la que están declarados.



Java
class Person {  // private variable  private String name;  public void setName(String name) {  this.name = name; // accessible within class  }  public String getName() { return name; } } public class Geeks {  public static void main(String[] args)  {  Person p = new Person();  p.setName('Alice');  // System.out.println(p.name); // Error: 'name'  // has private access  System.out.println(p.getName());  } } 

Producción
Alice 

Explicación: No se permite el acceso directo al nombre fuera de la Persona que aplica la encapsulación.

Modificador de acceso predeterminado

Cuando no se especifica ningún modificador de acceso para un método de clase o miembro de datos, se dice que tiene el modificador de acceso predeterminado de forma predeterminada. Esto significa que sólo las clases dentro del mismo paquete pueden acceder a él.

Java
class Car {  String model; // default access } public class Main {    public static void main(String[] args){    Car c = new Car();  c.model = 'Tesla'; // accessible within the same package  System.out.println(c.model);  } } 

Producción
Tesla 

Explicación: No se puede acceder a los miembros con acceso predeterminado desde clases en un paquete diferente.

Frikis.java: Clase predeterminada dentro del mismo paquete

Java
// default access modifier  package p1;  // Class Geek is having  // Default access modifier  class Geek  {   void display()   {   System.out.println('Hello World!');   }  } 

GeeksNew.java: Clase predeterminada de un paquete diferente (para contrastar)

C++
// package with default modifier  package p2;  import p1.*; // importing package p1 // This class is having  // default access modifier  class GeekNew {   public static void main(String args[]) {     // Accessing class Geek from package p1   Geek o = new Geek();   o.display();   }  } 

Explicación:  En este ejemplo, el programa mostrará el error en tiempo de compilación cuando intentemos acceder a una clase modificadora predeterminada desde un paquete diferente.

Modificador de acceso protegido

El modificador de acceso protegido se especifica utilizando la palabra clave protected. Los métodos o miembros de datos declarados como protegidos son accesibles dentro del mismo paquete o subclases en diferentes paquetes.

Java
class Vehicle {  protected int speed; // protected member } class Bike extends Vehicle {  void setSpeed(int s)  {  speed = s; // accessible in subclass  }  int getSpeed()  {  return speed; // accessible in subclass  } } public class Main {  public static void main(String[] args){    Bike b = new Bike();  b.setSpeed(100);  System.out.println('Access via subclass method: '  + b.getSpeed());  Vehicle v = new Vehicle();  System.out.println(v.speed);  } } 

Producción
Access via subclass method: 100 0 

Explicación: Se puede acceder a la velocidad a través de métodos de subclase y otras clases en el mismo paquete, pero el acceso directo desde un paquete diferente (que no sea de subclase) fallaría.

Modificador de acceso público

El modificador de acceso público se especifica mediante la palabra clave public. Se puede acceder a los miembros públicos desde cualquier lugar del programa. No hay restricciones en el alcance de los miembros de datos públicos.

Java
class MathUtils {     public static int add(int a int b) {  return a + b;  } } public class Main {    public static void main(String[] args) {    System.out.println(MathUtils.add(5 10)); // accessible anywhere  } } 

Producción
15 

Explicación: add() es accesible globalmente debido al modificador público.

Las clases o interfaces de nivel superior no se pueden declarar como privadas porque privado significa "solo visible dentro de la clase adjunta".

Tabla comparativa de modificadores de acceso en Java

misma_clase' loading='lazy' title=Modificador de acceso

Cuándo utilizar cada modificador de acceso en proyectos del mundo real

  • Privado: La idea debería ser utilizar un acceso lo más restrictivo posible, por lo que se debería utilizar lo privado tanto como sea posible.
  • Por defecto (Paquete privado): se utiliza a menudo en utilidades con ámbito de paquete o clases auxiliares.
  • Protegido: Comúnmente utilizado en diseños basados ​​en herencia, como extensiones de marco.
  • Público : se utiliza para clases de servicios de puntos finales de API o métodos de utilidad compartidos en diferentes partes de una aplicación.


Crear cuestionario