Hoy aprenderemos sobre el control de derechos de acceso en Java. Antes de discutir el control de acceso, discutamos por qué se necesita el control de acceso. Considere dos escenarios:
Escenario 1: Engineer A escribió una clase ClassA, pero el ingeniero A no quiere que ClassA sea accedido por otras clases utilizadas en la aplicación, entonces, ¿cómo debemos lidiar con ella?
Escenario 2: Si el ingeniero A escribe una clase de clase, que tiene dos métodos Fun1 y Fun2, el ingeniero solo quiere que Fun1 sea visible para el mundo exterior. Es decir, si otros ingenieros llaman a ClassA, solo pueden llamar a Method Fun1, ¿qué debemos hacer?
En este momento, el control del permiso de acceso puede desempeñar un papel.
En Java, se proporcionan cuatro tipos de control de derechos de acceso: derechos de acceso predeterminados (derechos de acceso de paquetes), público, privado y protegido.
Tenga en cuenta que solo los permisos de acceso predeterminados y el público pueden usarse para modificar la clase para los cuatro tipos anteriores de permisos de acceso. Los cuatro permisos de la clase modificada están bien. (Las clases mencionadas en este lugar están dirigidas a clases externas, no a clases internas)
Lo siguiente explicará estos cuatro controles de derechos de acceso para los miembros de la clase de modificación y la clase de modificación.
1. Categoría de modificación
Permisos de acceso predeterminado (permisos de acceso al paquete): si se usa para modificar una clase, significa que la clase solo es visible para otras clases en el mismo paquete.
Público: si se usa para modificar una clase, significa que la clase es visible para todas las demás clases.
Echemos un vistazo a la diferencia entre los dos a través de algunos ejemplos:
Ejemplo 1:
Main.java:
paquete com.cxh.test1; Public Class Main { / ** * @param args * / public static void main (string [] args) {// TODO Método generado automático stub People = New People ("Tom"); System.out.println (People.getName ()); }} Gente.java
paquete com.cxh.test1; Clase People {// Permiso de acceso predeterminado (Permiso de acceso al paquete) Private String Name = null; Public People (nombre de cadena) {this.name = name; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }}Como se puede ver en el código, la modificación de la clase People utiliza permisos de acceso predeterminados, y dado que la clase de personas y la clase principal están en el mismo paquete, la clase People es visible para la clase principal.
Programa de ejecución de resultados:
Ejemplo 2:
Gente.java
paquete com.cxh.test2; Clase People {// Permiso de acceso predeterminado (Permiso de acceso al paquete) Private String Name = null; Public People (nombre de cadena) {this.name = name; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; }}En este momento, la clase People y la clase principal no están en el mismo paquete. ¿Qué pasará?
Aquí están los errores solicitados en la clase principal:
Involucra que la clase Peolple no es visible en la clase principal. A partir de esto, podemos ver que si una clase se modifica con permisos de acceso predeterminados, la clase solo es visible para otras clases en el mismo paquete y no es visible para clases en diferentes paquetes.
Como se muestra en el mensaje de corrección rápida en la figura anterior, si cambia los permisos de acceso predeterminados de la clase People a Public, la clase People será visible para la clase principal.
2. Métodos y variables de modificaciones de clases
Permisos de acceso predeterminados (permisos de acceso al paquete): si los métodos o variables de una clase se modifican mediante permisos de acceso al paquete, significa que los métodos o variables de la clase solo se pueden llamar en otras clases en el mismo paquete, y los métodos o variables de la clase no se pueden llamar mostrados en clases en diferentes paquetes.
Privado: si los métodos o variables de una clase son modificados por privado, entonces los métodos o variables de la clase solo se pueden acceder en la clase misma y no se pueden mostrar en la clase o en otras clases.
Protegido: si los métodos o variables de una clase están modificados por protegidos, se puede acceder a los métodos o variables de esta clase para la misma clase de paquete. Para clases con diferentes paquetes, solo las clases heredadas de esa clase pueden acceder a métodos o variables de esa clase.
Público: los métodos o variables modificadas por público son visibles en cualquier lugar.
Tomemos algunos ejemplos para ver las diferencias entre sus métodos y variables de clase de alcance:
Ejemplo 3:
Main.java no ha cambiado
Gente.java
paquete com.cxh.test1; Public Class People {private String name = null; Public People (nombre de cadena) {this.name = name; } String getName () {// Permiso de acceso predeterminado (permiso de acceso al paquete) Nombre de retorno; } void setName (nombre de cadena) {// permiso de acceso predeterminado (permiso de acceso al paquete) this.name = name; }}En este momento, los métodos de llamadas GetName y SetName se pueden mostrar en la clase principal.
Pero si la clase People y la clase principal no están en el mismo paquete:
paquete com.cxh.test2; // está en un paquete diferente de la clase principal de la clase pública personas {private String name = null; Public People (nombre de cadena) {this.name = name; } String getName () {// Permiso de acceso predeterminado (permiso de acceso al paquete) Nombre de retorno; } void setName (nombre de cadena) {// permiso de acceso predeterminado (permiso de acceso al paquete) this.name = name; }}En este momento, se solicitará un error en la clase principal:
A partir de esto, podemos ver que si el permiso de acceso predeterminado se utiliza para modificar los métodos o variables de la clase, solo se puede acceder en otras clases del mismo paquete.
Ejemplo 4:
Gente.java
paquete com.cxh.test1; Public Class People {private String name = null; Public People (nombre de cadena) {this.name = name; } cadena protegida getName () {nombre de retorno; } protegido void setName (nombre de cadena) {this.name = name; }}En este momento, puede mostrar los métodos de llamadas GetName y SetName en Main.
Si la clase People y la clase principal están en diferentes paquetes:
paquete com.cxh.test2; Public Class People {private String name = null; Public People (nombre de cadena) {this.name = name; } cadena protegida getName () {nombre de retorno; } protegido void setName (nombre de cadena) {this.name = name; }}Se informará un error en Main:
Si un hombre de clase se especifica en com.cxh.test1 para heredar a las personas, puede mostrar los métodos de llamadas getName y setname en la clase hombre:
paquete com.cxh.test1; import com.cxh.test2.people; Public Class Man extiende a People {public Man (nombre de cadena) {super (nombre); } public String toString () {return getName (); }}Aquí hay algunos conocimientos sobre paquetes Java y archivos de clase:
1) Los paquetes en Java se utilizan principalmente para evitar conflictos de nombres de archivos de clase y facilitar la organización y gestión del código;
2) Para un archivo de código fuente de Java, si hay una clase pública, solo puede haber una clase pública, y el nombre del archivo del código fuente debe ser exactamente el mismo que el nombre de la clase pública. Además, si hay otras clases, estas clases son invisibles fuera del paquete. Si el archivo del código fuente no tiene una clase pública, el nombre del archivo del código fuente se puede nombrar como quiera.
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.