¿Cuáles son las clasificaciones de las clases internas?

Las clases internas se pueden dividir en cuatro tipos: clases internas miembro, clases internas locales, clases internas anónimas y clases internas estáticas.

Clase interna estática
Una clase estática definida dentro de una clase es una clase interna estática.

1 public class Outer {
    
    
2
3 private static int radius = 1;
4
5 static class StaticInner {
    
    
6 public void visit() {
    
    
7 System.out.println("visit outer static variable:" + radius);
8 }
9 }
10 }

La clase interna estática puede acceder a todas las variables estáticas de la clase externa, pero no puede acceder a las variables no estáticas de la clase externa, el método de creación de la clase interna estática, nueva clase externa, clase interna estática (), es el siguiente :

1 Outer.StaticInner inner = new Outer.StaticInner();
2 inner.visit

Clase interna del miembro
Definida dentro de la clase, la clase no estática en la posición del miembro es la clase interna del miembro.

1 public class Outer {
    
    
2
3 private static int radius = 1;
4 private int count =2;
5
6 class Inner {
    
    
7 public void visit() {
    
    
8 System.out.println("visit outer static variable:" + radius);
9 System.out.println("visit outer variable:" + count);
10 }
11 }
12 }

Las clases internas de los miembros pueden acceder a todas las variables y métodos de las clases externas, incluidos los estáticos y no estáticos, privados y públicos. La clase interna del miembro depende de la instancia de la clase externa, y su método de creación es la instancia de la clase externa nueva clase interna (), de la siguiente manera:

1 Outer outer = new Outer();
2 Outer.Inner inner = outer.new Inner();
3 inner.visit();

Clase interna local
La clase interna definida en el método es una clase interna local:

1 public class Outer {
    
    
2
3 private int out_a = 1;
4 private static int STATIC_b = 2;
5
6 public void testFunctionClass(){
    
    
7 int inner_c =3;
8 class Inner {
    
    
9 private void fun(){
    
    
10 System.out.println(out_a);
11 System.out.println(STATIC_b);
12 System.out.println(inner_c);
13 }
14 }
15 Inner inner = new Inner();
16 inner.fun();
17 }
18 public static void testStaticFunctionClass(){
    
    
19 int d =3;
20 class Inner {
    
    
21 private void fun(){
    
    
22 // System.out.println(out_a); 编译错误,定义在静态方法中的局部类不可以访问外
部类的实例变量
23 System.out.println(STATIC_b);
24 System.out.println(d);
25 }
26 }
27 Inner inner = new Inner();
28 inner.fun();
29 }
30 }

La clase local definida en el método de instancia puede acceder a todas las variables y métodos de la clase externa, y la clase local definida en el método estático solo puede acceder a las variables y métodos estáticos de la clase externa. La forma de crear una clase interna local, en el método correspondiente, nueva clase interna (), es la siguiente:

1 public static void testStaticFunctionClass(){
    
    
2 class Inner {
    
    
3 }
4 Inner inner = new Inner();
5 }

Clase interna anónima
Una clase interna anónima es una clase interna sin nombre, que se usa a menudo en el desarrollo diario.

1 public class Outer {
    
    
2
3 private void test(final int i) {
    
    
4 new Service() {
    
    
5 public void method() {
    
    
6 for (int j = 0; j < i; j++) {
    
    
7 System.out.println("匿名内部类" );
8 }
9 }
10 }.method();
11 }
12 }
13 //匿名内部类必须继承或实现一个已有的接口
14 interface Service{
    
    
15 void method();
16 }

Además de no tener nombre, las clases internas anónimas tienen las siguientes características:
Las clases internas anónimas deben heredar una clase abstracta o implementar una interfaz.
Una clase interna anónima no puede definir ningún miembro estático ni método estático.
Cuando el parámetro formal del método necesita ser utilizado por la clase interna anónima, debe declararse como final.
Una clase interna anónima no puede ser abstracta, debe implementar todos los métodos abstractos de la clase heredada o la interfaz implementada.

Supongo que te gusta

Origin blog.csdn.net/qq_44872509/article/details/130380553
Recomendado
Clasificación