Modificadores de acceso público frente a paquetes en Java

Cada vez que escribimos nuestras clases, debemos proporcionar cierta información sobre nuestras clases a la JVM , como si se puede acceder a esta clase desde cualquier lugar o no, si la creación de clases secundarias es posible o no, si la creación de objetos es posible o no, etc. podemos especificar esta información usando una palabra clave apropiada en Java llamada modificadores de acceso. Por lo tanto, los modificadores de acceso se utilizan para establecer la accesibilidad de clases, métodos y otros miembros.

Analicemos ambos modificadores de la siguiente manera:

  • Modificadores de acceso público
  • Modificador de acceso al paquete (predeterminado)

Modificador 1: Modificadores de acceso público

Si una clase se declara como pública, podemos acceder a esa clase desde cualquier lugar.

Crearemos un paquete pack1 dentro de ese paquete declaramos una clase A que es pública y dentro de esa clase, declaramos un método m1 que también es público. Ahora creamos otro paquete pack2 y dentro de ese pack2 importamos pack1 y declaramos una clase B y en el método principal de la clase B creamos un objeto de tipo clase A e intentamos acceder a los datos del método m1.

Ejemplo 1:

Java

// Java Program to illustrate  Public Access Modifiers
 
// creating a package
package pack1;
   
// import required packages
import java.io.*;
import java.util.*;
   
// declaring a public class
public class A {
     
    // declaring method m1
    public void m1() { System.out.println("GFG"); }
}

Salida: Compilar y guardar el código anterior usando la siguiente línea de comando:
 

Aquí importaremos la clase anterior del paquete creado al paquete recién creado. 

Ejemplo 2: 

Java

// Java Program to illustrate  Public Access Modifiers
 
// creating a package
package pack2;
 
// importing class from above package
// package pack1
// import required packages
import java.io.*;
import java.util.*;
import pack1.A;
 
// Main class
class B {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of type class A
        A a = new A();
 
        // accessing the method m1()
        a.m1();
    }
}

Salida Explicación:

Si la clase A no es pública al compilar la clase B, obtendremos un error en tiempo de compilación que dice pack1. A no es público en el paquete 1 y no se puede acceder desde el paquete externo. De manera similar, un miembro, método o interfaz se declara como público, ya que podemos acceder a ese miembro desde cualquier lugar.

Modificador 2: Modificador de acceso al paquete (predeterminado)  

Una clase, método o variable se declara sin ningún modificador de acceso, entonces se considera que tiene un modificador de acceso de paquete (predeterminado). El modificador predeterminado actúa como público dentro del mismo paquete y actúa como privado fuera del paquete. Si una clase se declara como predeterminada, podemos acceder a esa clase solo dentro del paquete actual, es decir, desde el paquete externo no podemos acceder a ella. Por lo tanto, el modificador de acceso predeterminado también se conoce como modificador de acceso a nivel de paquete. Una regla similar también se aplica a las variables y métodos en Java.

Ejemplo: 

Java

// Java Program to illustrate Package Level Access Modifier
 
// Importing utility classes
// Importing input output classes
import java.io.*;
import java.util.*;
 
// Main Class
class GFG {
 
    // Declaring default variables that is
    // having no access modifier
    String s = "Geeksfor";
    String s1 = "Geeks";
 
    // Method 1
    // To declare a default method
    String fullName()
    {
        // Concatenation of strings
        return s + s1;
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an object of main class(GFG)
        // in the main() method
        GFG g = new GFG();
 
        // Calling method1 using class instance
        // and printing the concatenaion of strings
        System.out.println(g.fullName());
    }
}

 Producción: 

GeeksforGeeks

Finalmente, después de comprender y analizar ambos, concluyamos las diferencias evidentes entre ellos que se muestran en la siguiente tabla de la siguiente manera:
 

                  Modificador de acceso público                  Modificador de acceso a paquetes
Se puede acceder a los miembros públicos desde una clase no secundaria de un paquete externo. No se puede acceder a este modificador desde una clase no secundaria del paquete externo.
Se puede acceder a los miembros públicos desde la clase secundaria del paquete externo. No podemos acceder a este modificador desde la clase secundaria del paquete externo.
El modificador público es más accesible que el modificador de acceso al paquete. Este modificador está más restringido que el modificador de acceso público.

Publicación traducida automáticamente

Artículo escrito por mroshanmishra0072 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *