El acceso de una clase o un método o ambos en Java se puede declarar con la ayuda de modificadores de acceso . Modificadores de acceso que están disponibles en Java
- Modificador privado: si se declara solo accesible dentro de la clase
- Modificador predeterminado: si se declara solo accesible dentro del propio paquete
- Modificador protegido: si se declara accesible dentro del paquete y solo en clases secundarias de otros paquetes
- Modificador público: si se declara accesible en cualquier lugar
Obtenga más información sobre los modificadores de acceso aquí .
Nota: Hay otros modificadores final, strictfp, static, abstract, pero no son modificadores de acceso, es decir, proporcionan información sobre la creación de instancias de objetos o la anulación de permisos, etc., pero no se utilizan para declarar el acceso.
Tipos de Nivel de Acceso
Hay dos tipos de nivel de acceso
1. Acceso a nivel de clase
El acceso otorgado a una clase, ya sea que sea visible fuera del paquete, etc., se denomina acceso a nivel de clase. Los modificadores public y default[package_ private] se utilizan para el acceso a nivel de clase. Si usamos el modificador público, la clase se puede usar en cualquier lugar con solo la condición de que la clase debe estar disponible [importar, etc.]. mientras que si usamos el modificador predeterminado, solo se puede acceder a la clase dentro del paquete declarado y no en ningún otro lugar
modificador |
dentro de la clase |
Dentro del paquete |
Paquete exterior |
---|---|---|---|
público |
sí |
sí |
sí |
defecto |
sí |
sí |
no |
2. Acceso a nivel de método
El acceso otorgado a un método de una clase, ya sea para trabajar fuera de la clase o paquete o dentro de una clase secundaria, etc., se denomina acceso a nivel de método. Los cuatro modificadores se utilizan para el acceso a nivel de método
Nota : la clase debe ser pública si usamos métodos protegidos o públicos, ya que la clase debe estar disponible en los paquetes externos antes de que usemos sus miembros. Aunque tenga al menosun método público o protegido, es obligatorio declarar la clase . como publico
- Si usamos el modificador privado , el método solo se puede permitir dentro de la clase.
- Si usamos el modificador predeterminado , solo se puede acceder a la clase dentro del paquete declarado y no en ningún otro lugar, la clase puede ser pública o no, no hace ninguna diferencia.
- Si usamos el modificador protected , entonces se puede acceder a la clase en cualquier lugar dentro del paquete y solo en las clases secundarias fuera del paquete que también solo tienen referencias secundarias.
- Si usamos el modificador público , entonces se permite usar el método en cualquier lugar con la única condición de que la clase debe estar disponible.
modificador |
dentro de la clase |
Dentro del paquete |
paquete exterior por subclase solamente |
Paquete exterior |
clase pública (debe/puede) |
---|---|---|---|---|---|
privado |
sí |
no |
no |
no |
mayo |
defecto |
sí |
sí |
no |
no |
mayo |
protegido |
sí |
sí |
sí |
no |
deber |
público |
sí |
sí |
sí |
sí |
deber |
Ejemplo
Un programa de ejemplo para demostrar los modificadores de acceso.
Java
package salary; public class Manager { private int a = 15; // This method needs to be private as // only the manager will have the // power to change employees' salary private void change() { System.out.println("salary changed"); } // This method needs to be protected // as the companies salary // column can only be seen by // the company employees // and their child companies protected void sal_column() { System.out.println("salary shown"); } // This method needs to be default // as individual salary // can only be shared within the company void indi_sal() { System.out.println("your salary is shown"); } // This method needs to be public // as the cost of a product // must be marketized to increase the profits public void prod_cost() { System.out.println("product cost"); } } class Employee { public static void main(String arg[]){ Manager mng = new Manager(); // error: change() has private access in Manager // mng.change(); // total salary of all employees mng.sal_column(); // individual salary mng.indi_sal(); // cost of product mng.prod_cost(); } } // Code written by @srivathsanani
Java
package reports; // importing salary package with Manager class import salary.Manager; // The reports of our company needs our // manager so we inherit Manager class public class Reports extends Manager { public static void main(String arg[]) { Manager manager = new Manager(); Reports report = new Reports(); // error: indi_sal() is not public in Manager; // cannot be accessed from outside package // manager.indi_sal(); manager.prod_cost(); report.sal_column(); } } // AS other companies are not related to our // company we won't inherit our Manager class class OtherCompany { public static void main(String arg[]) { Manager manager = new Manager(); manager.prod_cost(); // error: sal_column() has protected access in Manager // manager.sal_column(); } } // code written by @srivathsanani
Nota: solo debemos usar referencias de clases secundarias si estamos usando métodos protegidos fuera del paquete
Tabla de diferencias
Acceso a nivel de clase |
Acceso a nivel de método |
---|---|
Se da acceso a una clase, ya sea que sea visible fuera del paquete, etc., se denomina acceso a nivel de clase. | El acceso otorgado a un método de una clase, ya sea para trabajar fuera de la clase o paquete o dentro de una clase secundaria, etc., se denomina acceso a nivel de método. |
Sólo dos modificadores tienen la autoridad. | Todos los modificadores de acceso son aplicables. |
Será accesible dentro del paquete o en todas partes. | Será accesible dentro del paquete o en una clase secundaria, etc. |
Da acceso a las clases independientemente del método de acceso. | El acceso a los métodos depende del acceso a la clase. |
Esto le da acceso de nivel superior. | Esto no proporciona un acceso completo de nivel superior. |
Aunque podemos restringir la accesibilidad de una clase mediante la aplicación de modificadores, no podemos asegurarla en gran medida, ya que el modificador privado y protegido no se aplican a nivel de clase. | Podemos restringir por completo la accesibilidad y disponibilidad de un método con el uso de modificadores de acceso, los modificadores privados y protegidos son aplicables a nivel de método. |
Publicación traducida automáticamente
Artículo escrito por srivathsanani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA