Prefacio
Un cierre es un objeto invocable que registra alguna información del alcance en el que se creó. A través de esta definición, se puede ver que la clase interna es un cierre orientado a objetos, ya que no solo contiene información sobre el objeto de clase periférica (el alcance de crear la clase interna), sino que también tiene una referencia automáticamente al objeto de clase periférica. En este rol, la clase interna tiene el derecho de operar a todos los miembros, incluidos los miembros privados.
Uno de los problemas más controvertidos en Java es que se cree que Java debería incluir algún mecanismo similar al puntero para permitir devoluciones de llamada. A través de la devolución de llamada, el objeto puede llevar alguna información que le permita llamar al objeto inicial en algún momento posterior. Si la devolución de llamada se implementa a través de un puntero, solo puede esperar que el programador no use mal el puntero.
1. Clase interna de miembros
Una clase interna puede considerarse como un miembro. La clase interna miembro puede acceder incondicionalmente a todas las propiedades de los miembros y métodos de miembros de las clases externas.
clase OutterClass {// clase externa privada int in in = 0; static int Inn = 4; public outterClass (int en) {this.in = in; } class InnClass {// Inner Class public void output () {System.out.println (in); System.out.println (posada); }}}Cuando una clase interna miembro posee una variable o método miembro con el mismo nombre que una clase externa, se accede a los miembros de la clase interna del miembro de forma predeterminada. Si desea acceder a un miembro del mismo nombre de una clase externa, debe acceder a él en la siguiente forma:
OutterClass (clase externa).
Cuando una clase externa accede a una clase interna, primero debe crear un objeto de la clase interna del miembro y luego acceder a él a través de una referencia a este objeto.
clase OutterClass {private int in in = 0; static int Inn = 4; public outterClass (int in) {innerClass inner = new InnerClass (); this.in = inner.innernum; } class InnClass {// Inner Class public int InnerNum = 1; public void output () {System.out.println (in); System.out.println (posada); int a = outterClass.This.inn; }}}Las clases internas de los miembros existen en función de las clases externas, es decir, si desea crear un objeto de la clase interna del miembro, la premisa es que debe existir un objeto de la clase externa. La forma general de crear un objeto de clase interna miembro es la siguiente:
clase de clase pública clase class {public static void main () {outterClass oc = new outterClass (3); OutterClass.innerClass in = OC.Neo InnClass (); }} 2. Categorías internas locales
Una clase interna local es como una variable local en un método, y no puede tener modificadores public , protected , private y static .
class outterClass {public outterClass (int in) {class inNerClass {// local clase interna int innerNum = 1; }}} 3. Clases internas anidadas
Las clases internas anidadas son clases internas modificadas como static . Una clase interna declarada como static no requiere una conexión entre el objeto de clase interna y el objeto de clase externa, es decir, podemos referirnos directamente a outer.inner , es decir, no necesitamos crear una clase externa o una clase interna.
clase OutterClass {public outterClass (int in) {} Class estática InnClass {// Class interna local int InnerNum = 1; }} public class Class {public static void main () {outterClass.innerClass in = new OutterClass.innerClass (); }} 4. Categoría interna anónima
Las clases internas anónimas son las que más usamos porque no queremos darles nombres, por lo que tenemos el anonimato. Las clases internas anónimas deben definirse por adelantado.
btnsan.setOnClickListener (NewOnClickListener () {@Override publicvoidonClick (Ver v) {}}); 5. Cierres y devoluciones de llamada
Un cierre es un objeto que se puede llamar, que guarda información sobre el alcance que lo crea. Java no puede admitir explícitamente los cierres, pero en Java, los cierres se pueden implementar a través de la "interfaz + clase interna".
Por ejemplo: un programador de interfaz y un escritor de clase base tienen el mismo work de método y el mismo nombre de método, pero su significado es completamente diferente. En este momento, se requiere un cierre.
Class Writer {// Writer Base Class void Work () {};} Programador de interfaz {// Interfaz de programador void Work ();} El código de implementación de cierre es el siguiente:
Public Class WriterProgrammer extiende al escritor {@Override public void Work () {// Writing} public void Code () {// Escribir código} El programador de clase implementa programador {@Override public void work () {code (); }}} En la subclase, se define una clase interna que sigue las reglas de la interfaz del programador, y luego la clase interna implementa el método de devolución de llamada del método work() code() e implementa directamente work() del escritor de clase principal en la subclase.
6. El papel de las categorías internas
Las clases internas se pueden implementar bien para esconderse.
En general, las clases no internos no permiten permisos private y protected , pero las clases internas pueden
La clase interna tiene acceso a todos los elementos de la clase periférica
Pero se logra una herencia múltiple
Puede evitar modificar la interfaz e implementar llamadas de dos métodos del mismo nombre en la misma clase.
7. Resumen
Lo anterior es todo el contenido de este artículo. Espero que sea de ayuda para que todos aprendan o usen Java. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.