内部类:类中定义类
当类中的成员也是一个事物,可以定义为内部类
内部类的分类:
- 成员内部类
- 私有内部类
- 静态内部类
- 局部内部类
- 匿名内部类
- 成员内部类:
内部类定义在外部类的成员位置
- 特点:
具有类的特征:继承父类,实现接口,修饰符…
成员的特点:成员修饰符(能够修饰符成员的成员修饰符)修饰。。。 public ,ststic final
(Outer01 I n n e r − − − − − > Inner-----> Inner−−−−−>代表内部类) - 注意:
- 在成员内部类中不能定义静态的内容,除了final修饰过的常量
- 在内部类中可以直接使用外部类中的成员,包括私有的
- 在外部类中使用内部类的内容需要通过内部类的对象使用
- 使用:
其他类中使用内部类中的内容,通过对象,内部类对象要依赖于外部类对象
私有内部类
私有内部类中的内容只能在外部类通过对象使用
静态内部类
- 可以定义静态的内容
- 内部类中静态内容中,可以直接使用内部外部的静态内容,通过内部类的对象使用内部类的成员,通过外部类的对象使用外部类的成员
- 内部类中成员内容中,可以直接使用内.外部的静态内容,可以直接使用内部类中的成员,通过外部类对象使用外部类的成员,因为内部类是静态的
- 外部类中通过类名使用内部类中的静态内容,通过内部类对象使用内部类中的成员
- 静态内部类是依赖于外部类的,而不是外部类的对象
局部内部类
方法中定义内部类
- 不能使用public,static,default,protected,private,final…修饰
- 只能在其定义的方法中通过对象使用
- 局部内部类中使用方法的参数,要求这个参数必须被final修饰,1.7及之前版本必须显示定义,1.8及之后可以省略
匿名内部类:
类体是存在的,只不过这个类体没有名字
作用:为了简化没有具体本身作用的实现类
Lambda表达式
语法:
()->{}
(): 重写抽象方法的参数例表
->: 箭头符号,Lambda符号,具有上下文推导的作用
{} : 重写抽象方法的方法体
目的:简化匿名内部类
前提: 函数式接口
函数式接口: 只有一个抽象方法的接口
强制检查: @FunctionalInterface