目录
1. 定义
匿名内部类是定义在外部类的局部位置,比如方法中,没有类名(表面没有名字,但JDK的底层还是会分配名字:外部类名+ $1 ,同一个外部类的 下一个匿名内部类 分配的名字是 + $2 ,依次向后递增)。本质还是一个类,同时还是一个对象。
2. 基本语法
new 类或接口(参数列表) {
//类体
};
3. 使用细节
(1)匿名内部类的语法比较特别,因为匿名内部类既是一个类的定义,同时它本身也是一个对象。因此从语法上看,它既有定义类的特征,也有创建对象的特征。因此调用匿名内部类的方法有两种:
①创建类的对象实例调用
②直接作为对象调用
(2)匿名内部类实际上也是继承了父类,或者是实现了接口。
(3)可以直接访问外部类的所有成员,包括私有的。
(4)不能添加访问修饰符,因为它的地位就是一个局部变量。
(5)作用域:仅仅在定义它的方法或代码块中。
(6)匿名内部类本身只能访问一次,但创建的对象实例可以多次访问。
(7)匿名内部类 访问 外部类的成员,访问方式:直接访问。
(8)外部其他类 不能访问 匿名内部类,匿名内部类就是一个局部变量。
(9) 如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想要访问外部类的成员,则可以使用(外部类名.this.成员)去访问。
4. 最佳应用场景
匿名内部类本质是一个对象,当该接口实现只使用一次时,当作实参直接传递,简洁高效。