10-Clase interna de miembro de clase interna de Java, clase interna local, clase interna anónima


1. Clase interior

Defina una clase dentro de otras clases, esta clase se llama clase interna.

  • Según la clase interna, la posición de definición es diferente y se divide en clase interna de miembro y clase interna local
    • Clase interna de miembro : la clase interna se encuentra en la posición de miembro de la clase externa
    • Clase interna local : la clase interna se encuentra en el método miembro de la clase externa

Por ejemplo:

class A{
    
    
   //成员内部类:位于外部类的成员位置
   class B{
    
    

   }
    public void show(){
    
    
      //局部内部类,位于外部类成员方法内
       class C{
    
    

        }
    }
}

1. Clase interna de miembros

  • Características de acceso de clases internas de miembros

    • La clase interna puede acceder directamente a los miembros de la clase externa, incluidos los privados.

    • Para acceder a los miembros de la clase interna, la clase externa debe crear un objeto de clase interna

    • Puede crear objetos de clase internos directamente fuera, formato

Nombre de clase externa. Nombre de clase interna Nombre de objeto = nueva clase externa (). Nueva clase interna ()

  • Nota

    • La clase no se puede privatizar, pero la clase interna sí (a menudo se utiliza la privatización de la clase interna, la forma de acceso indirecto externo para garantizar la seguridad de los datos)

    • Las clases internas se pueden modificar con estáticas, llamadas clases internas estáticas, que solo pueden acceder a miembros estáticos de clases externas (para facilitar el acceso a los datos)

    • El formato de la clase interna estática creada directamente por el mundo exterior

Wai.Nei a = nuevo Wai.Nei ();

Por ejemplo:

public class 内部类的访问特点 {
    
    
    public static void main(String[] args) {
    
    
        //可以在外部直接创内部类的对象
        Outer.Inner inner1=new Outer().new Inner();
        inner1.neishow();
        Outer outer=new Outer();
        outer.waishow();

    }

}
class Outer{
    
    
    int num=100;
    private int a=200;
    class Inner{
    
    
        int b=300;
        public void neishow(){
    
    
            System.out.println(b);
            //内部类可以发访问外部类的成员,包括私有成员
            System.out.println(num);
            System.out.println(a);
            waishow1();
        }
        public void neitest(){
    
    
            System.out.println("内部类方法执行");
        }
    }
    public void waishow(){
    
    
        System.out.println("外部的show方法执行");
        //外部类访问内部类的成员,必须创建内部类的对象
        Inner inner=new Inner();
        //通过内部类对象,访问内部类的成员变量
        System.out.println(inner.b);
        //通过内部类对象,访问内部类的成员方法
        inner.neitest();
    }
    private void waishow1(){
    
    
        System.out.println("外部类私有方法执行");
    }
}

2. Clase interna local

  • Características de acceso de las clases internas locales
    • Puede acceder directamente a miembros de clases externas
    • Puede crear objetos de clase internos y llamar a métodos de clase internos a través de objetos para usar funciones de clase internas
    • El acceso de clase interna local a las variables locales debe ser una modificación final

Por ejemplo:

public class 局部内部类 {
    
    
    public static void main(String[] args) {
    
    
        int a=100;
        int b=200;
        Outer outer=new Outer();
        outer.waishow(100,200);

    }
}
class Outer{
    
    
    private int num=20;

    public void waishow(final int a,final int b){
    
    
        //该局部变量需要使用final修饰
        final int num1=30;
        //局部内部类定义在成员方法内
        class inner{
    
    
            public void neishow(){
    
    
                num=40;
                System.out.println(num);
                System.out.println(num1);
                System.out.println(a+":"+b);
            }
        }
        //创建内部类对象,调用内部类功能
        inner x = new inner();
        x.neishow();
    }
}

3. Clase interna anónima

Es una forma simplificada de escribir clases internas locales.

  • Requisito previo: hay una clase (puede ser una clase abstracta) o interfaz; formato:

    nuevo nombre de clase o nombre de interfaz () { método de reescritura; };

  • Naturaleza:Objetos anónimos que heredan esta clase o subclases que implementan esta interfaz

Por ejemplo:

//抽象类
abstract class AbstractClass{
    
    
    public abstract void show();
}
class Outer1{
    
    
    public void method(){
    
    
        //创建抽象类的子类的匿名对象
        new AbstractClass(){
    
    
            @Override
            public void show() {
    
    
                System.out.println("shoshowshow");
            }
        };
    }
}
//接口
public interface MyInter{
    
    
    public abstract void show();
}
class Outer{
    
    
    public void method(){
    
    
        new MyInter(){
    
    
            @Override
            public void show() {
    
    
                System.out.println("showshowshow");
            }
        };

    }
}

Supongo que te gusta

Origin blog.csdn.net/m0_46988935/article/details/110559846
Recomendado
Clasificación