· Resumen de la clase interna de Java

Clase interior

1. Definición

Una clase definida en otra clase.

2. ¿Por qué necesitas clases internas?

1. Las clases internas se pueden ocultar de otras clases en el mismo paquete.

2. Los métodos de clase interna pueden acceder a los datos en el ámbito de esta clase, incluidos los datos privados originales.

3. Utilice clases internas para acceder al estado del objeto

Nota: Solo las clases internas pueden ser privadas, mientras que las clases normales pueden tener visibilidad de paquete o visibilidad pública. Una vez que la clase interna es privada, solo los métodos de la clase externa de la clase interna pueden construir el objeto de la clase interna.

1. Un método de clase interna puede acceder a su propio campo de datos y también puede acceder al campo de datos del objeto de clase externa que lo creó.

4. Reglas gramaticales especiales para clases internas

public class demo {
    
    
    private int num;
    private String name;

    void mean1(){
    
    
        inclass var=new inclass();
    }
    void mean2(){
    
    
        inclass var=this.new inclass();
    }
    void mean3(){
    
    
        demo de = new demo()
        inclass var=de.new inclass();//显示地命名将外围类引用设置为其他对象。
    }
    public class inclass {
    
    
        public void f(){
    
    
            if(demo.this.num>0) System.out.println(1);//内部类有一个外围类的引用。
        }
    }
}

Nota: Todos los campos estáticos declarados en la clase interna deben ser finales e inicializar una constante en tiempo de compilación. Las clases internas no pueden tener métodos estáticos y la especificación del lenguaje Java no proporciona ninguna explicación para esta limitación.

5. Clase interna local

En la clase externa, puede haber solo un método que crea un objeto de la clase interna. Cuando esto sucede, podemos definir esta clase localmente en un método. Declarar una clase local no puede tener un especificador de acceso (es decir, público o privado), y el alcance de la clase local se limita al bloque en el que se declara la clase local. La clase local tiene una gran ventaja, es decir, está completamente oculta al mundo exterior, incluso a otros códigos de la clase interna, solo el bloque de alcance conoce la existencia de la clase interna.

6. Clase interna anónima

Al usar clases internas locales, generalmente puede ir un paso más allá. Si solo desea crear un objeto de esta clase, ni siquiera necesita especificar un nombre para la clase. Esta clase se denomina clase interna anónima.

La sintaxis es la siguiente:

new SuperType(construction parameters)

{
    
    

​	inner class methods and data

}

SuperType puede ser una interfaz y las clases internas deben implementar esta interfaz. También puede ser una clase y la clase interna necesita ampliar esta clase. Una clase interna anónima no puede tener un constructor. De hecho, los parámetros de construcción se pasan al constructor de la superclase.

Al generar información de registro o depuración, generalmente desea incluir el nombre de clase de la clase actual, como:

System.out.println(getClass());

Pero esto no funciona con métodos estáticos. Porque getclass llama a this.getclass. El método estático no tiene esto.

Podemos usar el siguiente método

public class demo {
    
    
    private int num;
    private String name;

    public static void main(String[] args) {
    
    
        //System.err.println(this.getClass());
        System.out.println(new Object() {
    
    
        }.getClass().getEnclosingClass());
        new demo().fs();
    }
    void fs(){
    
    
        System.out.println(getClass());
    }
}

new Object () {} creará un objeto anónimo de la subclase anónima de Object. getEnclosingClass () obtiene su clase adjunta, que es la clase que contiene este método estático.

7. Clase interna estática

Cuando la clase interna se declara estática, la clase interna estática es similar a otras clases internas, excepto que el objeto de la clase interna estática no genera una referencia a su objeto de clase externa. A diferencia de las clases regulares, las clases internas estáticas pueden tener campos y métodos estáticos. Las clases internas declaradas en la interfaz son automáticamente estáticas y públicas.

Supongo que te gusta

Origin blog.csdn.net/changbaishannefu/article/details/113113776
Recomendado
Clasificación