一:内部类
1.概念
2.访问特征
- 内部成员可以直接访问外部类成员,包括私有
-
3.内部类的分类
一:成员位置内部类
1. 定义在类中,方法体之外,可以看做是外部类的一个普通成员,内部类依赖着外部类对象而存在1. 创建内部类对象:1. 外部类中,和创建普通对象没啥区别1. 外部类的外部, 外部类名. 内部类名 对象名 = 外部类对象.内部类对象3. 成员内部类常用修饰符:1. private:保证成员位置内部类只对外部类可见1. static:1. 整个内部类,就变成了一个静态上下文1. 内部类不再依赖于外部类对象而存在
二:局部位置内部类
1. 定义在类中,方法体之外1. 创建:局部内部类,只能在定义内部类的方法体中创建该类对象1. 访问特征:1. 局部内部类除了有所有内部类共有的访问特征之外,还可以访问方法体中的局部变量(但只能访问final的局部变量)1. 原因:1. 局部变量存储在栈帧中,栈帧随方法的结束而被销毁,而局部内部类对象并不一定随着方法的执行而被销毁(即方法执行结束后,局部变量已经不存在,而匿名内部类对象还存在,因此他就可以去访问那个已经不存在的局部变量 )
三:匿名内部类对象:
1. 本质:是一个继承了类或者实现了接口的匿名子类 匿名对象1. 优点:1. 不管是成员还是局部位置内部类,我们要使用内部类都分成了两步:定义内部类 创建内部类对象,通过定义匿名内部类对象,我们可以将上面的两步分为一步3. 前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类3. 语法: new 类名或者接口名(){重写方法}3. 访问特征:1. 一个匿名内部类对象,因为是个匿名 对象,所以每访问一次成员都需要创建一个对象(除非用一个引用变量指向该对象)6. 使用场景:1. 只使用某抽象类,或者接口子类对象一次的情况下使用:1. 方法的形式参数是引用类型(特别是接口的情况)1. 当方法返回的是一个接口类型的子类对象的时候
