Skip to content

内部类

内部类(Inner Class)是定义在另一个类内部的类。Java 允许在一个类的内部定义另一个类,这样的类称为内部类,包含内部类的类称为外部类。

特点

  1. 封装性:内部类可以访问外部类的所有成员,包括私有成员
  2. 逻辑相关性:内部类通常只被外部类使用,体现了良好的封装性
  3. 多重继承效果:内部类可以实现 Java 的多重继承效果
  4. 代码组织:可以将存在一定逻辑关系的类组织在一起

用法示例

java
public class OuterClass {
    private String outerField = "外部类字段";
    private static String staticOuterField = "外部类静态字段";

    // 成员内部类
    class InnerClass {
        private String innerField = "内部类字段";

        public void display() {
            // 可以直接访问外部类的所有成员
            System.out.println("访问外部类字段: " + outerField);
            System.out.println("访问外部类静态字段: " + staticOuterField);
        }
    }

    public void testInnerClass() {
        // 在外部类中创建内部类实例
        InnerClass inner = new InnerClass();
        inner.display();
    }

    public static void main(String[] args) {
        // 在其他类中创建内部类实例
        OuterClass outer = new OuterClass();
        OuterClass.InnerClass inner = outer.new InnerClass();
        inner.display();
    }
}

内部类的分类

Java 中的内部类主要分为以下几种:

  1. 成员内部类:位于外部类成员位置的非静态类
  2. 静态内部类:使用 static 修饰的内部类
  3. 局部内部类:定义在方法或作用域内的内部类
  4. 匿名内部类:没有名字的内部类,通常用于实现接口或继承类

静态内部类

静态内部类是使用 static 关键字修饰的内部类。它不依赖于外部类的实例,可以直接通过外部类名访问。

特点

  1. 独立性:静态内部类不持有对外部类实例的引用
  2. 访问限制:只能直接访问外部类的静态成员
  3. 实例化:无需外部类实例即可创建对象
  4. 内存效率:相比非静态内部类更节省内存

用法示例

``java public class OuterClass { private static String staticField = "外部类静态字段"; private String instanceField = "外部类实例字段";

// 静态内部类
static class StaticNestedClass {
    public void display() {
        // 可以直接访问外部类的静态成员
        System.out.println("访问静态字段: " + staticField);

        // 不能直接访问外部类的实例成员
        // System.out.println(instanceField); // 编译错误

        // 如果需要访问实例成员,必须通过实例引用
        OuterClass outer = new OuterClass();
        System.out.println("通过实例访问: " + outer.instanceField);
    }
}

public static void main(String[] args) {
    // 创建静态内部类实例的方式
    OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
    nested.display();
}

}


### 使用场景

1. **工具类**:当内部类不需要访问外部类的实例变量时
2. **单例模式**:静态内部类实现线程安全的单例模式
3. **组织代码**:将相关的辅助类组织在一起,提高代码可读性

## 局部内部类

鸡肋语法,了解即可

Copyright ©2025 moweiwei