问答题746/1053内部类的分类有哪些

难度:
2021-11-02 创建

参考答案:

在 Java 中,内部类是一种嵌套在其他类中的类,根据定义和用途可以分为以下几种:


1. 静态内部类(Static Nested Class)

  • static 修饰,属于外部类本身,而不是外部类的某个实例。
  • 特点
    • 只能访问外部类的静态成员(包括静态字段和静态方法)。
    • 不依赖外部类的实例。
  • 使用场景
    • 用于逻辑上与外部类相关,但不需要访问外部类实例成员的情况。

示例

1class Outer { 2 static class StaticNested { 3 void display() { 4 System.out.println("Static Nested Class"); 5 } 6 } 7}

使用

1Outer.StaticNested nested = new Outer.StaticNested(); 2nested.display();

2. 非静态内部类(Non-static Inner Class 或 Member Inner Class)

  • 定义在外部类的内部,且没有使用 static 修饰。
  • 特点
    • 需要通过外部类的实例才能创建。
    • 可以访问外部类的所有成员(包括私有成员)。
  • 使用场景
    • 当内部类需要访问外部类的实例成员时。

示例

1class Outer { 2 private String message = "Hello, Inner Class!"; 3 4 class Inner { 5 void display() { 6 System.out.println(message); 7 } 8 } 9}

使用

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

3. 局部内部类(Local Inner Class)

  • 定义在方法、代码块或构造器中。
  • 特点
    • 只能在定义它的方法或代码块中使用。
    • 可以访问外部类的成员和局部变量,但局部变量必须是 finaleffectively final(Java 8 之后)。
  • 使用场景
    • 用于需要封装临时逻辑的场景。

示例

1class Outer { 2 void method() { 3 final int number = 42; 4 5 class LocalInner { 6 void display() { 7 System.out.println("Local Inner Class, number: " + number); 8 } 9 } 10 11 LocalInner inner = new LocalInner(); 12 inner.display(); 13 } 14}

使用

1Outer outer = new Outer(); 2outer.method();

4. 匿名内部类(Anonymous Inner Class)

  • 没有名字的内部类,直接实例化。
  • 特点
    • 常用于简化代码实现,如实现接口或继承类时只需要使用一次。
    • 只能创建一个实例。
    • 不能定义构造方法。
  • 使用场景
    • 用于简化代码,特别是在事件处理和回调中。

示例

1interface Greeting { 2 void sayHello(); 3} 4 5class Outer { 6 void method() { 7 Greeting greeting = new Greeting() { 8 @Override 9 public void sayHello() { 10 System.out.println("Hello from Anonymous Inner Class!"); 11 } 12 }; 13 greeting.sayHello(); 14 } 15}

使用

1Outer outer = new Outer(); 2outer.method();

最近更新时间:2024-12-09