Java面向对象基础——10.内部类

目录

  • Java内部类总结
    • [1. 内部类(Inner Class)](#1. 内部类(Inner Class))
    • [2. 匿名类(Anonymous Class)](#2. 匿名类(Anonymous Class))
    • [3. 静态内部类(Static Nested Class)](#3. 静态内部类(Static Nested Class))
    • 共性与差异

Java内部类总结

Java中的内部类(Nested Class)是指定义在另一个类内部的类,使用较少但是需要了解。

1. 内部类(Inner Class)

  • 定义方式 :在外部类内部直接定义的类,无static修饰

    java 复制代码
    class Outer {
        class Inner { ... }
    }
  • 核心特性

    • 必须依附于外部类实例存在,不能单独创建
    • 实例化方式:Outer.Inner inner = outer.new Inner();
    • 持有外部类实例的引用,可通过Outer.this访问
    • 可直接访问外部类的private字段和方法
  • 编译产物 :生成Outer$Inner.class文件

2. 匿名类(Anonymous Class)

  • 定义方式 :在方法内部直接定义并实例化,无需显式类名

    java 复制代码
    Runnable r = new Runnable() {
        @Override
        public void run() { ... }
    };
  • 核心特性

    • 必须在定义时立即实例化
    • 可实现接口或继承普通类
    • 同样持有外部类实例引用,能访问其private成员
    • 适用于仅需一次性使用的简单类
  • 编译产物 :生成Outer$1.classOuter$2.class等文件(按出现顺序编号)

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

  • 定义方式 :用static修饰的内部类

    java 复制代码
    class Outer {
        static class StaticNested { ... }
    }
  • 核心特性

    • 独立存在,无需依附外部类实例
    • 实例化方式:Outer.StaticNested sn = new Outer.StaticNested();
    • 不能访问外部类的非静态成员,只能访问静态成员
    • 拥有外部类private成员的访问权限
  • 本质:逻辑上与外部类关联的独立类

共性与差异

类型 依附外部类实例 访问外部类private成员 静态成员访问
Inner Class 可访问静态和非静态
Anonymous Class 可访问静态和非静态
Static Nested Class 仅可访问静态

内部类的主要作用是实现类的逻辑聚合,同时保持对外部类私有成员的访问能力,在设计模式和回调机制中应用广泛。