版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
最近在翻看《Java并发编程实战》一书的时候,看到了一段令人费解的代码,在使用new关键字进行构造方法的时候,后还加了大括号{…},并且写了一个方法。
private static ThreadLocal<Connection> connectionHolder
= new ThreadLocal<Connection>(){
public Connection initialValue(){
return DriveManager.getConnection(DB_URL);
}
};
此处语法是Java的匿名子类。匿名子类的格式是就是 方法名(new 构造器){ 调用方法/重写方法 }
public class Demo_ThreadLocal {
public static void main(String[] args) {
Test t = new Test() {
@Override
public void method1() {
System.out.println("2222222222222");
}
};
t.method1();
Test t2 = new Test() {
public void method1() {
super.method3();
System.out.println("222222222222222");
}
};
t2.method1();
}
}
class Test {
public void method1() {
System.out.println("11111111111111");
}
public void method3(){
System.out.println("333333333333");
}
}
如果子类构造器中对父类方法进行重写,那么就调用重写的方法,这就是匿名子类的语法特性与目的。我们既可以在匿名子类中进行调用父类的方法,也可以在匿名子类中重写父类的方法以及直接调用父类方法。