java匿名内部类:java new一个新的类后面接{}有什么用
2016-12-14 本文已影响41人
小竹子爱广播
问:放
像下面这段代码,ThreadLocal在初始化的时候后面接了一个方法,我在自己的代码中也试了一下,可以再大括号中定义变量定义方法,但是外部是不能调用的,我想知道这样写除了初始化还有什么用途和意义呢?
private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>(){
public Integer initialValue(){
return 0;
}
};
答:1:这个叫匿名内部类
2:通过这种写法创建了一个ThreadLocal没有名字的子类。这个子类中覆盖了ThreadLocal的原有的initialValue方法,同时也创建了这个子类的一个实例。
它的作用跟
class OutterClass {
private static class MyThreadLocal extends ThreadLocal<Integer> {
public Integer initialValue(){
return 0;
}
}
private static MyThreadLocal seqNum = new MyThreadLocal();
}
等价,好处是你不用专门为这个子类(MyThreadLocal)想一个名字,代码量也少一点
3: 匿名内部类不能被引用,因为这个类的名字都没有,怎么引用呢?!