Menú
Está libre
registrarse
el principal  /  Consejo / Modificadores de nivel de acceso. Modificadores de acceso

Modificadores de nivel de acceso. Modificadores de acceso

Aquí intentaremos considerar casi todos los casos de aplicar modificadores de acceso. La excepción será solo su uso para anidar ( anidado.) e interno ( interno) Clases, así como para las interfaces, ya que estos temas aún no hemos considerado.

Las clases y los paquetes se utilizan junto con los modificadores de acceso, sirven como encapsulación por medio de ocultar los detalles de la implementación por una interfaz simple.

Los modificadores de acceso se pueden aplicar a las Clases y sus miembros: campos y métodos. En total, hay cuatro modificadores de acceso y aquí traeremos su breve descripción, luego consideraremos cada uno en detalle.

  • público - Cualquier componente declarado como público, Disponible en cualquier código
  • protegido. - Permite el acceso al componente dentro del paquete y las clases de herederos.
  • privado - Permite el acceso al componente dentro de la clase.
  • defecto (Sin palabra clave): permite el acceso a los componentes dentro del paquete

Las clases de herederos son clases heredadas de cualquier clase. Herencia, aún no hemos estudiado..

Acceso a clases

Las clases de nivel superior predeterminadas están disponibles en el paquete en las que se definen.. Sin embargo, si la clase de nivel superior se declara como público, Está disponible en todas partes (o en todas partes donde está disponible el paquete en sí). Limitamos esta aprobación por clases de alto nivel, porque las clases se pueden anunciar como miembros de otras clases. Dado que estas clases internas son miembros de la clase, entonces están sujetos a las reglas para monitorear el acceso a los miembros de la clase.

Acceso a miembros de la clase

Los miembros de la clase siempre están disponibles dentro del cuerpo del cuerpo. Defecto Los miembros de la clase también están disponibles en un paquete en el que se define la clase..

Modificador público

Para una clase que no está incrustada, solo se pueden especificar uno de los dos niveles de acceso posibles: especificado defecto y público . Cuando la clase se declara como público, él debe ser el único público La clase declarada en el archivo y el nombre del archivo debe coincidir con el nombre de la clase.

cómo público Se pueden anunciar clases, campos, métodos y diseñadores.

Modificador protegido.

Consideraremos este modificador en detalle en el tema de la herencia de las clases. Si no se usa herencia, este modificador funciona, así como el modificador predeterminado.

Lo único que se puede decir brevemente que los componentes declarados como protegido.Tendrá acceso cualquier clase infantil de cualquier paquete O cualquier clase del mismo paquete.

cómo protegido. Se pueden anunciar campos, métodos, diseñadores, clases invertidas y interfaces anidadas.

protegido. .

Modificador privado

Es el modificador de acceso más difícil de limitar. Elementos anunciados como privado Disponible solo dentro de la misma clase y cualquier persona fuera de la clase.

cómo privado Se pueden anunciar campos, métodos, diseñadores, clases incorporadas y intrefes anidados.

Las clases y las interfaces de nivel superior no se pueden anunciar como privado .

Esencialmente, los modificadores de acceso son un tema simple, pero también le devolveremos. Mientras era solo conocido. Y ahora un poco de práctica ...

Creé las clases MOD02.JAVA, DEFMOD.JAVA, promod.java y prvmod.java que pertenecen al paquete pro.java.pkg002, así como a la clase pubmod.java, que pertenece al paquete pro.java.pkg003. A continuación, traeré simplemente capturas de pantalla de estas clases y el resultado del programa:

¡Oye! En la conferencia de hoy, nos familiarizaremos con el concepto ". modificadores de acceso"Y considera ejemplos de trabajar con ellos. Aunque la palabra "familiarizarse" no será bastante correcta: con la mayoría de ellos, ya está familiarizado con las conferencias anteriores. Por si acaso, refrescante lo principal en la memoria. Modificadores de acceso - Estas son las palabras clave más a menudo que regulan el nivel de acceso a diferentes partes de su código. ¿Por qué "más a menudo"? Debido a que uno de ellos se establece de forma predeterminada y no se denota con una palabra clave :) En total, Java tiene cuatro modificadores de acceso. Los enumeramos en orden desde el estricto hasta el más "suave":

  • privado;
  • protegido;
  • predeterminado (paquete visible);
  • público.
Veamos a cada uno de ellos, definiremos cuando puedan venir a mano y dar ejemplos :)

Modificador privado


El privado es el modificador de acceso más estricto. Limita la visibilidad de los datos y los métodos de los límites de una clase. Este modificador es conocido por la conferencia sobre el Getter y los Setters. ¿Recuerdas este ejemplo? Gato de clase pública (nombre de la cadena pública; edad pública en edad; Peso del Interior Público; Gato público (Nombre de la cadena, Edad int, Peso int) (este. Nombre \u003d Nombre; Esto. Edad \u003d Edad; esto. Peso \u003d peso;) Gato público () () Void público SayMeow () (Sistema. Fuera. Println ("Meow!");)) Clase pública principal (cadena args) (gato gato \u003d nuevo gato (); gato. Nombre \u003d "" gato. Edad \u003d - 1000; gato. Peso \u003d 0;)) Lo consideramos en uno de los artículos anteriores. Aquí cometimos un grave error: descubrimos nuestros datos, con el resultado de que los programadores de colegas han ganado acceso directamente a los campos de clase y cambian su valor. Además, estos valores se asignaron sin cheques, con el resultado de que en nuestro programa puede crear un gato con edad -1000 años, nombre "" y pesando 0. Para resolver este problema, usamos getter y SettersTambién limitado acceso de datos utilizando modificador privado. Gato de clase pública (Nombre de la cadena privada; edad introduzca introduzca Peso introduzcoso; gato público (nombre de cadena, edad, en edad, peso int) (este. Nombre \u003d nombre; esto. Edad \u003d edad; esto. Peso \u003d peso;) Gato público () () Público Void SayMeow () (Sistema. Fuera. Println ("Meow!");) Cadena pública GetName () (Nombre de la devolución;) Void Public SetName (nombre de la cadena) (este. Nombre \u003d nombre;) Public Int getage () (edad de retorno;) escenario vacío público (envejecido int) (esto. Edad \u003d edad;) Public int Getweight () (peso de retorno;) Public Void Setweight (Peso int) (esto. Peso \u003d peso)), Restricción del acceso a los campos y la implementación de los Setters-Setters es el ejemplo más común de usar privado en el trabajo real. Es decir la implementación de la encapsulación en el programa es el propósito principal de este modificador. Esto se aplica no solo a los campos, por cierto. Imagina que en su programa hay un método que implementa alguna funcionalidad muy compleja. Para crear esto por ejemplo ... digamos, su método ReadDataFromCollider () toma la dirección de entrada con los datos, lee los datos de un gran colector de Hadrones en el formato Byte, convierte estos datos en el texto, escribe al archivo y te imprime. Incluso la descripción del método se ve urgente, qué decir sobre el código :) Para aumentar la legibilidad del código, sería bueno no escribir la lógica compleja del método en un solo lugar, pero al contrario, para romper el Funcionalidad en métodos individuales. Por ejemplo, el método READBYTEDATA () es responsable de la lectura de datos, ConvertByTesTesymbols () convierte los datos de Collider a Texto, Savetofile () guarda el texto resultante al archivo, y PrintColliderData (): imprime nuestro archivo con datos. El método ReadDataFromCollider () al final sería mucho más simple: Clase de Clase Pública (ReadDataFromCollider Public Void (Ruta PathTodata) (Byte ColliderData \u003d LetByTedata (PathTodata); String TextData \u003d ConvertByTestesymbols (ColliderData); archivo FileWithData \u003d Savetofile (TextData); filewithdata);) byte público readbytedata (pathtodata) ( // lee los datos en bytes ) Cadena pública ConvertByTestosymbols (Byte ColliderDatainBytes) () Público SavetoFile (String ColliderData) () Public Void PrintColliderData (archivo FileWithColliderData) ( // imprime datos del archivo )) Sin embargo, como recuerda de la conferencia en las interfaces, el usuario solo accede a la interfaz final. Y nuestros 4 métodos no son parte de ello. Ellos son auxiliar: Los creamos para mejorar la legibilidad del código y no pegamos cuatro tareas diferentes en un método. No es necesario acceder al usuario a estos métodos. Si el usuario al trabajar con el colisionador aparecerá acceso al método ConvertByTestosymbols (), lo más probable es que simplemente no entienda qué tipo de método es necesario. ¿Qué bytes se convierten? ¿De dónde vienen? ¿Por qué convertirlos al texto? La lógica que se realiza en este método no forma parte de la interfaz de usuario. Solo el método ReadDatafromCollider () es parte de la interfaz. ¿Qué hacer con estos cuatro métodos "internos"? ¡Derecha! Limite el acceso al modificador privado. Por lo tanto, podrán realizar tranquilamente su trabajo dentro de la clase y no para engañar al usuario, a quien la lógica de cada uno de ellos se necesita por separado. Classidelutil de clase pública (ReaddataFromCollider del void público (Path PathTodata) (Byte ColliderData \u003d LetByTedata (PathTodata); String TextData \u003d ConvertYTesTesymbols (ColliderData); archivo FileWithData \u003d Savetofile (TextData); PrintColliderData (FileWithData); // lee los datos en bytes ) Cadena privada converbytestosymbols (Byte ColliderDatainBytes) ( // convertir bytes a caracteres ) Archivo privado savetofile (cadena ColliderData) ( // guarda leer datos en archivo ) Void PrintColliderData privado (archivo FileWithColliderData) ( // imprime datos del archivo } }

Modificador protegido.

La siguiente estrictación del modificador de acceso está protegida.
Los campos y métodos indicados por el modificador de acceso protegido serán visibles:
  • dentro de todas las clases ubicadas en el mismo paquete que nuestro;
  • dentro de todos los personajes de los herederos de nuestra clase.
Es difícil imaginar cuando puede necesitar. No se sorprenda: las aplicaciones protegidas son mucho menos que privadas, y son específicas. Imagine que tenemos una clase abstracta abstractsecretagent, que denota el agente secreto de algún tipo de servicios especiales, así como el paquete TOPT_SECRET, que se encuentra en esta clase y sus herederos. Las clases específicas se heredan de IT - Fbisecretagent, MI6Secretagent, Mossadsecretagent, etc. Dentro de la clase abstracta, queremos implementar el mostrador del agente. Al crear algún lugar del programa de un nuevo agente de objetos, aumentará. Paquete top_secret; Clase abstracta pública AbstractsecretAntAgent (Agente de INT estática pública INT \u003d 0;) ¡Pero los agentes son secretos! Entonces, solo deberían conocerlos y nadie más. Podemos agregar fácilmente el modificador protegido al campo AgentCount, y luego los objetos de otra clase de agentes secretos podrán obtener su significado, o aquellas clases que se encuentran en nuestro paquete Top_Secrett "Secreto". Clase abstracta pública Abstractsecretagent (Agentcount estática protegida Agentcount \u003d 0;) Aquí para tales tareas específicas y el modificador protegido :)

Paquete visible modificador

Además, nuestra lista es el modificador predeterminado o, ya que también se llama, paquete visible. No se denota por una palabra clave, ya que está instalada en el Java predeterminado para todos los campos y métodos. Si escribe en su código - int x \u003d 10 ... la variable x será la mayoría de los paquetes de acceso visible. Recuerda lo que hace, fácil. De hecho, predeterminado \u003d protegido -nore :) Los casos de su aplicación son limitados, así como el modificador protegido. La mayoría de las veces, los medios predeterminados se utilizan en el paquete, donde hay algún tipo de clases de utilidad que no implementan la funcionalidad de todas las demás clases en este paquete. Damos un ejemplo. Imagina que tenemos un paquete " servicios." En su interior hay varias clases que trabajan con la base de datos. Por ejemplo, hay una clase de usuario, leyendo los datos de usuario de la base de datos, la clase de servicio, la lectura de la misma base de datos de automóviles y otras clases, cada una de las cuales funciona con su tipo de objetos y lee los datos sobre ellos de la base. Servicios de paquetes; Servicios de paquete de usuarios de clase pública (); Sin embargo, la situación puede suceder fácilmente cuando los datos en la base de datos están en un formato, y los necesitamos en otro. Imagínese que la fecha de la fecha del usuario en la base de datos se almacena en la marca de tiempo con la zona horaria ... 2014 - 04 - 04 20: 32: 59.390583 + 02 ... Necesitamos el objeto más fácil: java.util.date. Para este propósito, podemos crear dentro de la clase especial de Mapper dentro del paquete de servicios. Será responsable de convertir los datos de la base en nuestros objetos java habituales. Clase auxiliar simple. Por lo general, creamos todas las clases como el nombre de clase pública, pero no es necesario. Podemos declarar nuestra clase auxiliar al igual que la clase Mapper. En este caso, todavía hace su trabajo, ¡pero no es visible para nadie fuera del paquete de servicio! Servicios de paquetes; Servicios de paquetes de MAPPER () Class; SERVICIO DE CLASE PÚBLICA (MAPPER MAPPER;) Y esto es, de hecho, la lógica correcta: ¿Por qué alguien fuera del paquete vea una clase auxiliar que trabaja solo con las clases del mismo paquete?

Modificador público

Y el último en la lista, pero no significativamente, ¡el modificador público! Con él, se reunió en el primer día de estudio en Javarush, primero en mi vida que dirige el Público Estático Hecho Main (Cadena Args).
Ahora, cuando aprendió las conferencias en las interfaces, es obvio para usted el destino :) Después de todo, el público está diseñado para darle algo a los usuarios. Por ejemplo, su interfaz de programa. Supongamos que escribiste un traductor de programa, y \u200b\u200bella sabe cómo traducir el texto ruso en inglés. Usted creó el método Traducir (String TextinRussian), dentro de el cual se implementa la lógica necesaria. Este método notó la palabra pública, y ahora formará parte de la interfaz: clase pública traducir (String TextInrussian) ( // traduce el texto de ruso a inglés )) Puede conectar la llamada a este método con el botón "Traducir" en la pantalla del programa, ¡y eso es! Cualquiera puede usarlo. Las partes del código marcadas por el modificador público están destinadas al usuario final. Si le da un ejemplo de la vida, el privado es que todos los procesos que ocurren dentro del televisor cuando funciona, y el público es los botones en el televisor con el que el usuario puede administrarlos. Al mismo tiempo, no necesita saber cómo se organiza la televisión y se debe a la cual funciona. El control remoto es un conjunto de ajustes públicos: ON (), OFF (), NEXTCHANNEL (), AnteriorNel (), AumentVolume (), DisminuageVolume (), etc.

El idioma Java proporciona muchos modificadores divididos en las siguientes categorías:

  • modificador de acceso
  • Modificador de no acceso

El modificador se utiliza para determinar la clase, el método o la variable, como regla general, en el borde frontal de la aplicación. A través del siguiente ejemplo para ilustración:

ClassName de clase pública (// ...) Myflag privado booleano; Final estático Doble semanas \u003d 9.5; Final estático está protegido int boxwidth \u003d 42; PUBLICA ESTÁTICO ANTICO PRINCIPAL (argumentos de cadena) (// 方法 方法)

Modificador de control de acceso

Java, puede usar caracteres de control de acceso para proteger el acceso a las clases, variables, métodos y diseñadores. Java apoya cuatro derechos de acceso diferentes.

De forma predeterminada, también conocida como el valor. defecto Visible en el mismo paquete, no use ningún modificador.

Privado para indicar privado Modificador visible dentro de la misma clase.

Hay, para indicar común El modificador visible para todas las clases.

Protegido, B. protegido El modificador determina que para todas las clases y subclases dentro del mismo paquete visible.

Modificador de acceso predeterminado - No utilice ninguna palabra clave

Use variables y métodos declarados en el modificador de acceso predeterminado para una clase dentro del mismo paquete es visible. La interfaz donde las variables se declaran implícitamente como finales estáticas públicas, y una interfaz donde el método de acceso predeterminado para el público.

La aplicación en el siguiente ejemplo, las variables y los métodos no pueden usar ningún modificador.

Versión de cadena \u003d "1.5.1"; Procesador booleano () (devuelve verdadero;)

Modificador de acceso privado -private

El modificador de acceso privado es el nivel de acceso más estricto, se declara ambos métodos privados, variables y pertenecen a la clase del constructor solo pueden estar disponibles, y las clases y las interfaces no se pueden declarar cerradas.

Las variables declaradas como un tipo de acceso privado solo pueden estar disponibles fuera de la clase a través de la clase del método público de heter.

El acceso privado del modificador se utiliza principalmente para la clase de protección de los detalles de los datos de implementación y datos.

Las siguientes clases utilizan un modificador de acceso privado:

Registrador de clase pública (formato de cadena privada; cadena pública getFormat () (devuelve esto.Format;) SetFormat de voides público (formato de cadena) (este formato / formato;)))

Ejemplo, el formato de clase de registrador variable es una variable privada, por lo que otras clases no pueden recibir directamente y establecer el valor de la variable. Para poder trabajar desde otra variable de la clase, se determinan los dos métodos abiertos: getFormat () (valor de retorno) y setformat (string) (ajuste de formato)

Modificador de acceso abierto -Pobric

Se declara como clases públicas, métodos, diseñadores e interfaces pueden ser cualquier otro tipo de acceso.

Si varias visitas mutuas de las clases públicas en diferentes paquetes, debe importar el paquete correspondiente de la clase pública se encuentra constantemente. Desde la herencia de las clases, la clase de todos los métodos y variables disponibles públicamente puede ser heredada por sus subclases.

Las siguientes funciones utilizan el control de acceso público:

Público Estático Estático principal (Argumentos de cadena) (// ...)

El programa principal de Java () debe instalarse en lugares públicos, de lo contrario, el intérprete de Java no podrá iniciar la clase.

Modificadores de acceso protegidos protegidos.

Se declara como variables protegidas, métodos y constructores en el mismo paquete pueden ser cualquier otro tipo de acceso, y puede estar disponible en varios paquetes de subclase.

El modificador de acceso protegido no se puede cambiar las clases e interfaces, los métodos y las variables de los miembros se pueden declarar tanto protegidas, sino que no se pueden declarar métodos de miembro de la interfaz.

los subclases del modificador pueden acceder a métodos y variables seguros, de modo que podamos proteger las clases no unidas utilizando estos métodos y variables.

La siguiente clase principal usa un modificador de acceso seguro, las subclases anulan el método OpenSpeaker () de la clase principal.

Audioplayer de clase (altavoz SP) (// 实现)) Clase StreamingIniPlayer (Opennspeaker booleano (altavoz SP) (// 实现 细节))

Si el método OpenSpeaker () se declara como privado, además de la clase Audioplayer no puede acceder al método. Si OpenSpeaker () se ha anunciado como público, todas las clases tienen la capacidad de acceder al método. Si queremos que el proceso sea visible para las subclases de clase, el método se declara como protegido.

Control de acceso e herencia.

Preste atención a los siguientes métodos heredados las reglas:

    La clase principal se declara como métodos públicos en la subclase también deben ser públicos.

    La clase principal se declara como un método seguro en una subclase o declarado como protegido, o anunciado públicamente. No se puede declarar cerrado.

    La clase madre se declara como un método privado no se puede heredar.

Modificador de no acceso

Para lograr una serie de otras funciones, Java también proporciona una serie de modificadores sin acceso.

el modificador estático se utiliza para crear métodos de clase y variables de clase.

El modificador final utilizado para decorar clases, métodos y variables, la clase modificada final no se puede heredar, el método de clase modificado no se debe heredar una variable constante modificada, no se puede cambiar.

El modificador abstracto se utiliza para crear clases abstractas y métodos abstractos.

Modificadores síncronos y volátiles, principalmente para programar hilos.

Modificador estático

    Variables estáticas:

    Estática utilizando la palabra clave para declarar variables estáticas que no dependen del objeto, independientemente de cuántos objetos de la instancia de clase, es solo una copia de la variable estática. Las variables estáticas también se conocen como variables de clase. Las variables locales no se pueden declarar como variables estáticas.

    Métodos estáticos:

    Se utiliza una palabra clave estática para declarar que un objeto no depende del método estático. Los métodos estáticos no pueden usar una clase de variable estática. Método estático para obtener datos de la lista de parámetros y luego calcular los datos.

El acceso a las variables de clase y los métodos se pueden usar directamente a ClassName.VariAllelename y ClassName.MethodName Access.

En el siguiente ejemplo, el modificador estático se utiliza para crear métodos de clase y variables de clase.

Clase pública InstanceCounter (NUMINSTANCIAS PRIVADAS ESTÁTICAT INT \u003d 0; está protegido Static INT GetCount () (Regrestancias de retorno;) ADVISTANCIA ADIGICA ESTÁTICA PRIVADA ADDINISTANCE () (NUMINSTANCIAS ++;) InstanceCounter () (Instancecounter.AddInstance ();) Público Estático estático principal ( Argumentos de cadena) (System.out.println ("Empezando con" + instancecounter.getcount () + "instances"); para (int i \u003d 0; i; i< 500; ++i){ new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }

Ejemplos de los resultados anteriores de la operación de edición de la siguiente manera:

Comenzó con 0 instancias creadas 500 instancias.

Clasificador final

Variables finitas:

Las variables finales se pueden inicializar y inicializar explícitamente solo una vez. El directorio se declara a medida que los objetos finales no pueden especificar otro objeto. Pero el objetivo final, donde se pueden cambiar los datos. Esta referencia definitiva al objeto no se puede cambiar, sino el valor de las cuales se puede cambiar.

El modificador final generalmente se usa juntos para crear una constante de clase de modificador estático.

Prueba de clase pública (valor intestinal final \u003d 10; // 的 的 的 的 的 的 的 的 的 的 Final Estático Final int Boxwidth \u003d 6; Static Final String Title \u003d "(! Lang: Manager"; public void changeValue(){ value = 12; //将输出一个错误 } } !}

Método final

Métodos La clase final se hereda por subclases, pero no puede cambiar subclases.

El propósito principal del método es evitar que la declaración final de este método varía.

Como se muestra a continuación, utilizando métodos finitos de modificadores de declaración.

Prueba de clase pública (Final Public Void Changename () (// 方法 方法))

Categoría final

Las clases finales no pueden ser heredadas, ninguna clase puede heredar ninguna de las características de la clase final.

Prueba de clase final pública (// 类类)

Modificador abstracto

Clase abstracta:

La clase abstracta no se puede usar para crear una instancia de objetos, el único propósito de la aplicación es una clase abstracta para la futura expansión de esta clase.

La clase no puede ser cambiada Resumen y Final. Si la clase contiene métodos abstractos, la clase debe ser declarada como una clase abstracta, de lo contrario, el error del compilador.

Una clase abstracta puede contener métodos abstractos y no métodos abstractos.

Extracto Doble Precio; Modelo de cadena privada; Cuerda privada Año; Vacío abstracto público Gofast (); // 抽象 Público abstracto abstracto ChangeColor ();)

Método abstracto

Ningún método es una implementación abstracta del método, la implementación específica del método de las subclases proporcionadas. Los métodos abstractos no pueden ser declarados como finales y estrictos.

Cualquier subclase hereda una clase abstracta debe implementar todos los métodos abstractos de la clase de padres, si la subclase no es una clase abstracta.

Si la clase contiene una serie de métodos abstractos, la clase debe ser declarada como una clase abstracta. Una clase abstracta no puede contener métodos abstractos.

El anuncio abstracto del método termina con un punto y coma, por ejemplo: una muestra abstracta pública ();

Superclase de clase abstracta pública (abstracto Void M (); // 抽象 方法) Clase Subclass extiende SuperClass (// 实现 抽象 方法 Void M () (.........))

Modificador síncrono

Método de palabra clave síncrona para declarar al mismo tiempo solo un acceso de hilo. El modificador síncrono se puede aplicar a los cuatro modificadores de acceso.

ShowDetails Void ShowDails () (.......)

Modificador de transición

El objeto serializado contiene modificado por la instancia de la variable de transición de la máquina virtual Java (JVM) para omitir esta variable en particular.

El modificador está habilitado en la definición de variables de aplicación para procesamiento de tipos de datos y variables de preprocesamiento.

Límite INT Transitor Public \u003d 55; // no persistirá en público INT B; // persistirá.

Modificadores volátiles

La variable de miembro modificada volátil Cada vez que recurre a las transmisiones de TI se ven obligadas a volver a leer el valor de una variable de miembro de la memoria compartida. Además, cuando cambia a los miembros variables, la corriente se ve obligada a cambiar el valor se registra en la memoria general. Entonces, en cualquier momento, dos temas diferentes siempre ven el mismo valor de la variable miembro.

Clase pública MYRUNNABLE Implementos corrientes (Volátil privado Booolean activo; Ejecución de vacíos públicos () (activo \u003d verdadero; Mientras (activo) // 第第 (// 代码)) Public Void Stop () (Active \u003d Falso; // 第二 行))

En circunstancias normales, el flujo causa la () ejecución (en la corriente abierta correctable) en otra transmisión de llamadas para detener () el método. Si el valor activo en primera linea se usa tampón, en segunda fila Cuando el ciclo activo es falso no se detiene.

Sin embargo, el código anterior, usamos un activo volátil modificado, por lo que el ciclo se detendrá.

Última actualización: 20/04/2018

Todos los miembros de la clase en los campos Java y los métodos, tienen modificadores de acceso. En temas anteriores, ya hemos encontrado el modificador público. Los modificadores de acceso le permiten establecer un alcance permisible para los miembros de la clase, es decir, un contexto en el que se puede usar esta variable o método.

Java utiliza los siguientes modificadores de acceso:

    público: Miembro público o de clase pública, disponible públicamente. Los campos y métodos declarados con el modificador público son visibles para otras clases del paquete actual y fuera de los paquetes externos.

    privado: una clase cerrada o miembro de clase, lo opuesto al modificador público. Un miembro cerrado de clase o clase está disponible solo en el código en la misma clase.

    protegido: dicho miembro de clase o clase está disponible desde cualquier lugar de la clase o paquete actual o en clases derivadas, incluso si están en otros paquetes

    Modificador predeterminado. La falta de un modificador en un campo o método de clase implica el modificador predeterminado. Tales campos o métodos son visibles para todas las clases en el paquete actual.

Considere los modificadores de acceso utilizando el ejemplo del siguiente programa:

Programa de clase pública (indicando públicos que indican el vacío principal (Args de cadena) ("Kate", 32, "Baker Street", "+12334567"); kate.displayname (); // Normas, Método Público de Kate. Playage (); // Normas, el método tiene un modificador predeterminado kate.displayphone (); // normas, el método protegido //kate.displaydvess () //! error, sistema privado.out.println (kate.name); // norma , Sistema de modificador predeterminado.Out.println (Kate.Address); // NORM, sistema público.out.println modificador (kate.age); // norma, modificador protegido //system.out.println (kate.phone); //! Error, privado)) persona de clase (nombre de cadena; edad intestinal intestinal; dirección de cadena pública; teléfono de cadena privada; persona pública (nombre de cadena, edad, dirección de cadena, dirección de cadena) (este. Nombre \u003d nombre; este. Edad \u003d Edad; esta.Address \u003d Dirección; este.Phone \u003d Teléfono;) Pantalla de vacío público () (System.Out.Printf ("Nombre:% S \\ n", Nombre);) Vestuario de VACE () (System.out) .Printf ("Edad:% d \\ n", edad);) Vacío privado D isplayaddress () (System.out.printf ("Dirección:% s \\ n", dirección); ) Dispositivo de vacío protegido () (System.out.printf ("Teléfono:% s \\ n", teléfono);))

En este caso, ambas clases se encuentran en un paquete, el paquete predeterminado, por lo que en la clase de programa podemos usar todos los métodos y variables de la clase de persona, que tienen un modificador para la ion, público y protegido. Y los campos y métodos con el modificador privado en la clase del programa no estarán disponibles.

Si la clase del programa se habría localizado en otro paquete, solo los campos y los métodos con el modificador público estarían disponibles para él.

El modificador de acceso debe preceder al resto de la definición o método de la variable.

Encapsulación

Parecería ¿por qué no declarar todas las variables y métodos con el modificador público para que estén disponibles en cualquier punto del programa, independientemente del paquete o la clase? Tomemos, por ejemplo, el campo de edad, que representa la edad. Si otra clase tiene acceso directo a este campo, es probable que en el proceso del programa, se transmitirá un valor incorrecto, por ejemplo, un número negativo. Este cambio de datos no es deseable. O queremos que algunos datos valgan la pena directamente para que puedan aparecer en la consola o simplemente reconocer su significado. En este sentido, se recomienda restringir el acceso a los datos tanto como sea posible para protegerlos de un acceso no deseado desde el exterior (ambos para obtener el valor y los cambios). El uso de varios modificadores garantiza que los datos no se distorsionen o cambien no se cambie correctamente. Datos similares que se esconden dentro de un área de visibilidad determinada se denomina encapsulación.

Por lo tanto, como regla general, en lugar del uso directo de los campos, por regla general, use los métodos de acceso. Por ejemplo:

Programa de clase pública (cadena args) (persona kate \u003d nueva persona ("kate", 30); system.out.println (kate.getage ()); // 30 kate.setage (33); sistema .ut.println ( kate.getage ()); // 33 kate.setage (123450); System.out.println (kate.getage ()); // 33)) Persona de clase (nombre de cadena privada; edad introduzca intento; persona pública Nombre, int edad) (este nombre \u003d nombre; esto.age \u003d edad;) cadena pública getName () (devuelve este nombre;) Public Void SetName (nombre de cadena) (este nombre \u003d nombre \u003d nombre;) Public Int Getage ( ) (Devuelva esto.age) Stick Void Public (Si la edad) (si (EDAD\u003e 0 && EDE< 110) this.age = age; } }

Y luego, en lugar de la operación directa con los campos de nombre y edad en la clase Persona, trabajaremos con los métodos que establecen y devuelvan los valores de estos campos. SetName, los métodos de configuración también se denominan mutador, ya que cambian los valores de campo. Y los métodos GetName, Getage y probablemente llamados accessor, ya que con su ayuda obtenemos el valor del campo.

Y en estos métodos, podemos invertir lógica adicional. Por ejemplo, en este caso, cuando cambia la edad, se verifica hasta el nuevo valor corresponde al rango permitido.

Última actualización: 03.10.2019

Todos los miembros de la clase - campos, métodos, propiedades - todos ellos tienen modificadores de acceso. Los modificadores de acceso le permiten establecer un alcance permisible para los miembros de la clase. Es decir, los modificadores de acceso determinan el contexto en el que puede usar esta variable o método. En temas anteriores, ya lo encontramos cuando se anunciaron los campos de la clase (es decir, con el modificador público).

Los siguientes modificadores de acceso se aplican en C #:

    público: Miembro público o de clase pública, disponible públicamente. Dicho miembro de clase está disponible desde cualquier lugar del Código, así como de otros programas y asambleas.

    privado: clase cerrada o miembro de clase. Representa el completo opuesto al modificador público. Dicha clase cerrada o miembro de clase está disponible solo en el código en la misma clase o contexto.

    protegido: dicho miembro de clase está disponible desde cualquier lugar de la clase actual o en clases derivadas. En este caso, las clases derivadas se pueden ubicar en otras asambleas.

    interno: los miembros de clase y clase con un modificador similar están disponibles en cualquier código fuente en el mismo conjunto, sin embargo, no está disponible para otros programas y ensamblajes (como en el caso del modificador público).

    interno protegido: combina la funcionalidad de dos modificadores. Las clases y miembros de una clase con un modificador de este tipo están disponibles en la Asamblea actual y de las clases derivadas.

    principal protegido: dicho miembro de clase está disponible desde cualquier lugar de la clase actual o en clases derivadas que se definen en el mismo conjunto.

Podemos configurar explícitamente el modificador de acceso, por ejemplo:

Estado de clase protegido privado (impresión vacacional protegida () (consola.writeline ($ "A \u003d (a)");))

O no podemos indicar:

Estado de clase (int a; impresión vaca () (consola.writeline ($ "a \u003d (a)");)))

Si el modificador de acceso no está definido para campos y métodos, el modificador privado predeterminado se usa para ellos.

Las clases y estructuras declaradas sin un modificador tienen el acceso predeterminado a interno.

Todas las clases y estructuras definidas directamente en los espacios de nombres y no están incrustados en otras clases, solo pueden tener modificadores públicos o internos.

Veamos el ejemplo y cree el siguiente estado de clase:

Estado de clase pública (// sigue siendo que privado en cadena prefectiva; INT DEFAULTHAR; // El campo está disponible solo en la clase actual PRIVER PRIVICVAR; // disponible en la clase actual y las clases derivadas que se definen en el mismo proyecto Private Private Int ProtectedPrivateVar; // Disponible en la clase actual y derivados protegidos int Protectedvar; // Disponible en cualquier lugar del proyecto Actual Internantvar; // disponible en cualquier lugar del proyecto actual y de las clases de herederos en otros proyectos ProtectedInternalvar interno Internalvar; // Disponible en cualquier lugar del programa, así como para otros programas y construye PUBLIC INT PublicVar; // de forma predeterminada, el voto privado de defaidemethod () \u003d\u003e console.witeline modificador () \u003d\u003e console.writeline ($ "defaultvar \u003d ( DefadetVar) "); // El método está disponible solo en la clase actual Void PrivateMethod () \u003d\u003e console.writeline ($ privatevar \u003d (privatevar)); // disponible de la clase actual y clases derivadas que se definen en el mismo Rose protegido Privado Privado ProtectedPrivatemethod () \u003d\u003e Console.Writeline ($ ProtectedPrivateVar \u003d (ProtectedPrivateVar) "); // Disponible en la clase actual y derivados Protected ProtectedMethod () \u003d\u003e Console.Writeline ($ "ProtectedVar \u003d (ProtectedVar)"); // Disponible en cualquier lugar en el proyecto interno interno del proyecto interno () \u003d\u003e console.writeline ($ "internovar \u003d (internovar)"); // Disponible en cualquier lugar del proyecto actual y de las clases de herederas en otros proyectos protegidos de PROTEGERNALTETETETETETETETETETETETETETETETETETETETETETETETETETETETE () \u003d\u003e Console.Writeline ($ ProtectedInternalvar \u003d (ProtectedInternalvar) "); // Disponible en cualquier lugar del programa, así como para otros programas y construye Public Void PublicMethod () \u003d\u003e console.writeline ($ "publicvar \u003d (publicvar)"); )

Dado que la clase estatal se declara con el modificador público, estará disponible en cualquier lugar del programa, así como de otros programas y asambleas. La clase estatal tiene cinco campos para cada nivel de acceso. Más una variable sin un modificador que está cerrado (privado) de forma predeterminada.

También hay seis métodos que mostrarán los valores de los campos de clase en la pantalla. Tenga en cuenta que, dado que todos los modificadores le permiten usar a los miembros de la clase dentro de esta clase, luego todas las variables de clase, incluidas las cerradas, están disponibles para todos sus métodos, ya que todos están en el contexto de la clase de clase.

Ahora veamos cómo podemos usar las variables de nuestra clase en el programa (es decir, en la clase principal de la clase de programa), si las clases de estado y programas están en un proyecto:

Programa de clase (STATIC VOIDE1 \u003d nuevo estado (); // Asignar el valor de la variable DefaultVar, no funcionaremos, // Dado que tiene un modificador privado y la clase de programa no lo ve // \u200b\u200by este entorno de cadena enfatizará Como error incorrecto1.defaultvar \u003d 5; // Error, el acceso no puede // lo mismo se aplica al Error de PRIVERVAR State1.PrivateVar \u003d 5; //, el acceso no puede estar disponible // Asignar el valor de la variable ProtectedPrivateVar no funcionará, // Dado que la clase de programa no es un estado de estado de clase de clase-heredero1.protectedPrivateVar \u003d 5; / 5; // error, el acceso no puede estar disponible // Asignar el valor de la variable protectedvar tampoco funcionará, // Dado que la clase del programa no es Un estado de Estado de clase de clase-heredero de clase1.ProtectedVar \u003d 5; // Error, el acceso no puede estar disponible // La variable internaVar con el modificador interno está disponible desde cualquier lugar del proyecto actual //, por lo tanto, lo asignamos silenciosamente el valor de State1. internovar \u003d 5; // ProtectedInternalvar Variable también está disponible desde cualquier lugar del proyecto actual State1.ProtectedInternalvar \u003d 5; // PublicVar Variable Públicamente disponible State1.PublicVar \u003d 5; ))

Por lo tanto, pudimos instalar solo las variables de internetvar, ProtectedInternalvar y PublicVar, ya que sus modificadores le permiten usarlo en este contexto.

La situación es similar y con los métodos:

Programa de clase (STATIC VOIDE1 \u003d nuevo estado (); State1.DefaultMethod (); // error, no se puede acceder a Acceso por estado1.Privatemethod (); // error, el acceso no se puede aceptar State1.ProtectedPrivatemethod (); // error, El acceso no puede ser accesible State1.ProtectedMethod (); // error, el acceso no puede ser accesible State1.InternalMethod (); // Normas State1.ProtectedInternalMethod (); // State1.PublicMethod () Norma))

Aquí también tenemos acceso a solo tres métodos: métodos internal, ProtectedInternalTethod, PublicTethod, que están disponibles, según los modificadores internos, protegidos internos, públicos.

Gracias a un sistema de modificadores de acceso, puede ocultar algunos puntos de la clase de otras partes del programa.

A pesar del hecho de que los modificadores públicos e internos son similares en sus acciones, pero tienen una gran diferencia. Los miembros de clase y clase con el modificador público también estarán disponibles para otros programas si los datos se realizan en la biblioteca DLL Dynamic y luego lo usan en estos programas.