
一、什么是内部类内部类定义在一个类里面的类外面的类称为外部类。java// 外部类class Outer{// 内部类class Inner{}}1. 内部类编译完成后会生成独立 .class 文件命名格式 外部类名$内部类名.class2. 内部类可以直接访问外部类的私有成员不会破坏外部类的封装性。3. 内部类一共分为4类成员内部类、静态内部类、局部内部类、匿名内部类二、四种内部类介绍1. 成员内部类类比实例变量属于外部类的实例依赖外部类对象1. 位置定义在类内部、方法外面。2. 创建对象必须先创建外部类对象再创建内部类对象javaOuter o new Outer(); // 外部类对象Outer.Inner i o.new Inner(); //内部类对象3. 访问外部类 外部类名.this 用来访问外部类的属性、方法javaOuter.this.属性名;Outer.this.成员方法(参数);4. 限制成员内部类里面不能定义静态成员静态属性、静态方法2. 静态内部类类比静态变量被static修饰属于外部类本身不依赖外部实例1. 位置类内、方法外加 static 修饰。2. 可以定义实例变量也可以定义静态变量。3. 创建对象直接使用外部类的类名不需要外部类实例javaOuter.Inner i new Outer.Inner();4. 访问静态成员 外部类名.静态内部类名.静态成员javaOuter.Inner.静态属性名;Outer.Inner.静态方法(实参);5. 限制静态内部类只能访问外部类的静态成员静态属性、静态方法3. 局部内部类类比局部变量定义在方法里面作用域仅限当前方法1. 位置写在方法内部。2. 创建对象只能在定义它的方法内部并且在类定义代码之后创建对象。3. 访问方法内局部变量局部内部类可以访问方法里的局部变量JDK8之前局部变量必须加 final JDK8及以上编译器自动默认添加 final 这个特性叫语法糖。4. 匿名内部类特殊的局部内部类考试高频匿名内部类没有类名必须继承一个类 / 实现一个接口。1. 特点匿名内部类只能创建唯一一个对象类定义和对象创建写在一起。2. 语法格式java接口名 引用名 new 接口名(){//重写接口里面的抽象方法};3. 优缺点✅优点减少代码量代码逻辑连贯❌缺点可读性较差代码示例1实现接口javainterface IA{void m1();}public class Test{public static void main(String[] args){IA ia new IA(){public void m1(){System.out.println(重写m1方法);}};}}代码示例2继承普通类javapublic class Test {public static void main(String[] args) {MyClass mc new MyClass(){public void method(){System.out.println(子类覆盖后的方法。。);}};mc.method();}}class MyClass{public void method(){System.out.println(父类中method方法/...);}}三、快速记忆总结1. 成员内部类属于外部类实例 外部对象.new 内部类() 不能写static可访问外部所有成员。2. 静态内部类属于外部类 new 外部.内部() 只能访问外部static成员。3. 局部内部类写在方法内只能方法内使用访问局部变量自带final。4. 匿名内部类无类名一次性对象用来快速重写接口/父类方法。四、什么时候用内部类- 匿名内部类写回调、事件、接口一次性实现Swing、多线程Runnable常用- 静态内部类封装工具类比如 HashMap.Node- 成员内部类需要内部类持有外部类引用访问外部私有变量