¿Por qué el mecanismo de control de acceso está diseñado en Java? Hay dos funciones principales:
(1) Para que los usuarios eviten tocar piezas que no deben tocar, estas piezas son necesarias para las operaciones internas, pero no forman parte de la interfaz requerida por el programador del cliente.
(2) Para permitir que los diseñadores de la biblioteca de clases cambien el funcionamiento interno de las clases sin preocuparse por tener un impacto significativo en los usuarios.
El nivel de control del permiso de acceso en Java es:
Public -> Protected -> Acceso al paquete (sin modificador de permiso) -> Privado.
1. Paquete
El concepto de paquetes en Java es muy similar al concepto de espacios de nombres en C ++, y ambos pueden limitar el alcance de las clases. La mayor diferencia entre los dos es que los paquetes en Java indican implícitamente la jerarquía de árboles de la clase (y también la estructura del directorio del archivo del código fuente de Java). La ventaja de esto es que la singularidad de la clase puede estar restringida por los requisitos para la singularidad de la ruta de archivo en el sistema de archivos.
1. Organización del código
Al escribir un archivo de código fuente Java (archivo .java), este archivo generalmente se llama una unidad de compilación. A lo sumo, se permite una clase pública en la unidad de compilación, y el nombre de la clase debe ser exactamente el mismo que el nombre del archivo (incluida la caja superior y minúscula).
Al compilar un archivo .java, cada clase en el archivo .java tendrá un archivo de salida .class, y el nombre del archivo y el nombre de la clase son los mismos. Un programa Java Runnable es un conjunto de archivos .class que se pueden empaquetar y comprimirse en un archivo de documento Java (paquete JAR, utilizando el generador de documentos JAR de Java). El intérprete Java es responsable de la búsqueda, carga e interpretación de estos archivos.
Una biblioteca de clase es en realidad un conjunto de archivos de clase. Cada archivo .Java puede tener como máximo una clase pública, así como cualquier cantidad de clases no públicas. Por lo tanto, cada archivo tiene un artefacto. Si desea organizar estos componentes (cada compilación tiene un archivo .java y varios archivos .class) para formar diferentes grupos, puede usar el paquete de palabras clave en Java.
2. La función del paquete
(1) Organice clases o interfaces con funciones similares o relacionadas en el mismo paquete para facilitar la búsqueda y el uso de clases.
(2) Al igual que las carpetas, los paquetes también usan directorios en forma de árbol para almacenarlos. Los nombres de clases en el mismo paquete son diferentes, y los nombres de las clases en diferentes paquetes pueden ser los mismos. Cuando las clases con el mismo nombre de clase en dos paquetes diferentes se llaman al mismo tiempo, se debe agregar el nombre del paquete para distinguirlos. Por lo tanto, el paquete puede evitar conflictos de nombres.
(3) Los paquetes también limitan los derechos de acceso. Solo las clases con derechos de acceso al paquete pueden acceder a clases en un paquete.
3. Crea un paquete
En Java, use la palabra clave del paquete para especificar el paquete (espacio de nombres) al que pertenece el código.
Formato de sintaxis:
Paquete PKG1 [. PKG2 [. pkg3 ...]];
Nota:
(1) El nombre del paquete señala implícitamente la estructura del directorio del código.
(2) El nombre de la clase pública (también el nombre del archivo Java) en el mismo directorio debe ser único.
(3) La declaración del paquete debe estar en la primera línea del archivo fuente. Cada archivo fuente solo puede tener una declaración de paquete, y cada tipo en este archivo se aplica a él.
(4) Si un archivo fuente no usa una declaración de paquete, entonces las clases, funciones, enums, comentarios, etc. en él se colocarán en un paquete sin nombre.
(5) Los nombres de los paquetes generalmente están en letras minúsculas.
Por ejemplo:
Verifique el código fuente de la clase java.util.ArrayList y puede ver que la primera línea del archivo es:
paquete java.util;
Su estructura de directorio de código es Java/util/ArrayList.java
4. Paquete de importación
En Java, use la palabra clave de importación para importar paquetes.
Formato de sintaxis:
Package de importación1 [.Package2 ...]. (ClassName |*);
ejemplo:
Tomemos java.util.arraylist como ejemplo. Es muy inconveniente usarlo de una manera que tenga una ruta de clase completa.
java.util.arrayList <String> list = new java.util.arrayList <String> ();
Si desea omitir la ruta anterior, puede usar la palabra clave de importación.
import java.util.arrayList;
Después de importar el paquete en el archivo, el código anterior que declara la lista se puede simplificar de la siguiente manera:
ArrayList <String> list = new ArrayList <String> ();
2. Modificadores de derechos de acceso
1. Paquete: permisos de acceso al paquete
Si no se proporciona un modificador de acceso, significa que es acceso al paquete.
El acceso predeterminado no tiene palabras clave, pero generalmente se refiere al acceso al paquete (a veces también expresado como amigable, un poco como el concepto de elementos de amigos en C ++). Esto significa que todas las demás clases en el paquete pueden acceder a este miembro o método, pero no se puede acceder a todas las clases fuera de este paquete.
ejemplo:
com.notes.packages.test.info
paquete com.notes.packages.test; publicClass Info {void print () {System.out.println ("Método predeterminado - print ()"); }}com.notes.packages.test.publicdemo01
paquete com.notes.packages.test; publicClass publicDemo01 {publicstaticVoid Main (String [] args) {info x = new Info (); X.print (); }}PublicDemo01 y la información pueden acceder al método de información de nivel predeterminado - print () en el mismo paquete.
com.notes.packages.publicdemo02
paquete com.notes.packages; import com.notes.packages.test.info; publicClass publicDemo02 {publicstaticVoid main (string [] args) {info x = new info (); // x.print (); // Error }}PublicDemo02 y la información no están en el mismo paquete, y no se puede acceder al nivel de permiso de acceso al paquete del método de información - print ().
2. Publicado: permisos de acceso a la interfaz
Usar la palabra clave pública significa que el miembro o el método declarado es accesible para todos.
Ejemplo: si el permiso del método print () en el nivel de nivel predeterminado se establece en público, se puede acceder a publicDemo02.
paquete com.notes.packages.test; publicClass Info {publicvoid print () {System.out.println ("Method público - print ()"); }}3. Privado: No se puede acceder
Usar la palabra clave privada significa que el miembro o el método declarado es inaccesible para cualquier otra clase, excepto esta clase.
Escenario de aplicación: Modo Singleton
4. Protegido: heredar permisos de acceso
Una nueva clase (llamada clase infantil o clase derivada) puede reutilizar una clase existente (llamada clase principal o clase base) a través de la herencia, y luego extender los miembros y métodos de la clase base. A veces, el creador de una clase base querrá que un miembro específico asigne su acceso a la clase derivada en lugar de todas las clases. El público no puede hacer esto, y para este propósito, se introdujo protegido para hacer el trabajo. Protected también proporciona acceso al paquete, es decir, clases derivadas y otras clases dentro del mismo paquete pueden acceder a miembros o métodos protegidos.
Ejemplo: después de que la subclase hereda la clase principal, puede acceder a los miembros protegidos de la clase principal.
Class Padre {cadena privada a = "privado"; cadena protegida b = "protegida"; cadena pública c = "public";}; Class Son extiende el padre {publicvoid print () {// System.out.println ("Elemento A:" + Super.a); // Error System.out.println ("Elemento B:" + super.b); System.out.println ("Elemento C:" + super.c); }} publicClass ProtectedDemo01 {publicstaticVoid Main (String args []) {son sub = new Son (); sub.print (); }};Notas sobre modificadores de acceso
En los ejemplos anteriores, los miembros y los métodos de la clase pueden modificarse con varios modificadores de permisos.
Además, hay algunos puntos a los que prestar atención:
(1) El uso de modificadores de permiso para miembros estáticos y métodos estáticos es el mismo que el de los miembros y métodos comunes.
(2) Aunque la clase también puede ser modificada por modificadores, las dos palabras retóricas de permiso privadas y protegidas no pueden usarse.
(3) En algunos libros, el acceso al paquete también se llama acceso predeterminado. Personalmente, no recomiendo memorizar de esta manera, porque esto se confunde fácilmente con la nueva característica de Java SE8, la palabra clave predeterminada. Esta palabra clave solo se puede usar para la interfaz, y su función es permitir a los programadores definir la implementación predeterminada de interfaces en la interfaz (en las versiones JDK pasadas no permitió esto, solo puede declarar métodos en la interfaz).
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.