public class Anonymous {
{
System.out.println("代码块:"+this.getClass().getName());
}
public Anonymous() {
System.out.println("无参构造函数:"+this.getClass().getName());
}
}
class aaa{
public aaa() {
Anonymous n = new Anonymous(){
{
System.out.println("Anonymous匿名类:"+this.getClass().getName());
}
};
System.out.println("n:"+n.getClass().getName());
List<String> list_1 = new ArrayList<String>(){
{
System.out.println("List匿名类:"+this.getClass().getName());
}
};
System.out.println("list_1:"+list_1.getClass().getName());
List<String> list_2 = new ArrayList<String>();
System.out.println("list_2:"+list_2.getClass().getName());
}
}
public class AnonymousTest {
@Test
public void test1() {
Anonymous n = new Anonymous(){
{
System.out.println("Anonymous匿名类:"+this.getClass().getName());
}
};
System.out.println("n:"+n.getClass().getName());
List<String> list_1 = new ArrayList<String>(){
@Override
public int size() {
System.out.println("size");
return super.size();
}
{
System.out.println("List匿名类:"+this.getClass().getName());
}
};
System.out.println("list_1:"+list_1.getClass().getName());
System.out.println(list_1.size());
List<String> list_2 = new ArrayList<String>();
System.out.println("list_2:"+list_2.getClass().getName());
}
@Test
public void test2(){
System.out.println("--------------------");
aaa a = new aaa();
}
}
代码块:test.AnonymousTest$1
无参构造函数:test.AnonymousTest$1
Anonymous匿名类:test.AnonymousTest$1
n:test.AnonymousTest$1
List匿名类:test.AnonymousTest$2
list_1:test.AnonymousTest$2
size
0
list_2:java.util.ArrayList
--------------------
代码块:test.aaa$1
无参构造函数:test.aaa$1
Anonymous匿名类:test.aaa$1
n:test.aaa$1
List匿名类:test.aaa$2
list_1:test.aaa$2
list_2:java.util.ArrayList
总结:
代码块写在那个类,就是那个类的匿名类
结果相当于匿名类继承原有类,并且覆盖方法