使用场景:
1.所用的类只需要使用一次
2.需要访问某个类的protected ***方法,但该类与当前类不在同一个包中。可以使用匿名内部类继承那个类,然后定义一个方法,在该方法中调用super.***(),从而实现目的。
3.Thread, runnable经常可以通过匿名内部类的方式使用
Thread td = new Thread() {
public run() {
// TODO
}
}.start().
new Thread (new Runnable() {
@Override
public run() {
//TODO
}
}).start().
使用方式:
new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}
使用说明:
1、必须继承一个父类或者实现一个接口
2、只能继承一个父类或者实现一个接口
3、没有class关键字,因为匿名内部类是通过new生成一个对象的引用,这个引用是隐式的。
4、没有构造函数,初始化通过构造代码块完成
5、不能存在任何静态成员变量和静态成员方法
6、不能是抽象的,必须实现父类或接口里的所有抽象方法
匿名内部类使用外部参数时,该外部参数必须要定义为final类型。因为匿名内部类在使用该外部参数时,并不是直5接使用,而是通过自已的构造函数,将外部参数拷贝到匿名内部类的成员变量(或者说属性?)中,然后使用的是该成员变量(属性?)。如果外部参数发生变化,对于匿名内部类来说是不可知的,所以强制其为常量保持内外一致性。