什么是内部类

内部类就是定义在一个类里面的类,里面的类可以理解为寄生,外部类可以理解为宿主
image.png

内部类的使用场景,作用

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的结构又只为玩不实物提供服务,那么整个内部的完整结构就可以使用内部类来设计(汽车类,发动机类)
内部类可以方便的访问外部类的成员,包括私有成员(内部类也在类中)
内部类提供了更好的封装性,内部类本身就可以用private protectecd等来修饰,封装性可以做更多控制

内部类的分类

静态内部类(了解)
成员内部类(了解)
局部内部类(了解)
匿名内部类(重点)

静态内部类(了解)

有static修饰,属于外部类本身
他的特点和使用与普通类是完全一样的,类的成员他都有,只是位置在被放在外部类里面而已
image.png

创建静态内部类对象

格式:
外部类名.内部类名 对象名=new 外部类名.内部类名.内部类构造器();

静态内部类拓展问题

静态内部类是否可以直接访问外部类的静态成员
可以,外部类的静态成员只有一份可以被共享访问
静态内部类中是否可以直接访问外部类的实例成员
不可以的,外部类的实例成员必须用外部类对象访问

成员内部类(了解)

无static修饰,属于外部类对象
image.png

创建成员内部类对象

格式:
外部类名.内部类名 对象名=new 外部类构造器.new 内部类构造器();
这是因为成员内部类属于外部类对象,所以需要先new有个外部类对象
image.png

成员内部类拓展问题

成员内部类是否可以直接访问外部类的静态成员
可以,外部类的静态成员只有一份可以被共享访问
成员内部类中是否可以直接访问外部类的实例成员
可以的,外部类对象已经创建了

无聊的面试题

image.png
image.png

局部内部类(鸡肋语法,了解)

局部内部类放在方法,代码块,构造器等执行体中
局部内部类的类文件名为:外部类$N内部类.class

匿名内部类

匿名内部类概述

本质上是一个没有名字的局部内部类,定义在方法中、代码块中、等
作用:方便创建子类对象,最终目的是为了简化代码编写

匿名内部类的定义

格式:
类|抽象类名|或者接口名 对象名=new 类|抽象类名|或者接口名 (){
重写方法;
};

虽然定义中没有class 但是它仍然是一个类

image.png

匿名内部类的特点

匿名内部类是一个没有名字的内部类(局部内部类)会产生.class文件
匿名内部类写出来机会产生一个匿名内部类对象
匿名内部类的对象类型相当于是当前new的那个类型的子类类型

匿名内部类的常见使用方式

image.png
匿名内部类可以作为方法的实际参数进行传输

匿名内部类实际开发场景

image.png
image.png