嵌套类

public class Main {    // 静态嵌套类    static class Inner1{ }    /* 包内静态内部类的好处:    1. 作用域不会扩散到包外    2. 可使用 外部类.内部类 方式直接访问    3. 内部类可以直接访问所有静态属性及方法    */    // 普通内部类    class Inner2{}        public void f(){        // 局部内部类        class Inner3{}                // 匿名内部类        new Object(){};    }    }

使用理由

匿名内部类

局部内部类

普通内部类

静态嵌套类

对比

类型未知名字作用范围基本信息
匿名内部类成员遍历或者成员方法内外部类名+$+数字编号跟随被赋值遍历的作用范围,外界无法访问没有类名,没有构造函数,没有 static private/default/protected/public 修饰符
局部内部类成员方法内外部类名+$+序号+内部类名所在的方法内,外界无法访问有类名,有构造函数,没有 static private/default/protected/public 修饰符
普通内部类成员遍历外部类名+$+内部类名包围类内可以访问,外界可以访问有类名,有构造函数,没有 static,有 private/default/protected/public 修饰符
静态嵌套类成员遍历外部类名+$+内部类名包围类内可以访问,外界可以访问有类名,有构造函数,有 static,有 private/default/protected/public 修饰符
类型嵌套类内部的内容可访问的外部包围类内容和外部类关系
匿名内部类不能带静态成员,除了常量访问外部的所有成员在外部类对象内部
局部内部类不能带静态成员,除了常量访问外部的所有成员在外部类对象内部
普通内部类不能带静态成员,除了常量访问外部的所有成员外界可以new,但是对象必须依附于一个外部包围类对象
静态嵌套类可以定义静态成员遍历何方法访问外部的所有静态成员外界可以new,可独立工作

变量遮蔽

应用