public class AnonymousConstructor {
public static Base getBase(int i){
return new Base(i) {
//创建匿名类的构造方法的办法
{
System.out.println("Inside instance initializer");
}
@Override
public void f() {
System.out.println("In anonymous f()");
}
};
}
public static Base1 getBase1(){
return new Base1() {
{
System.out.println("Base1 Inside instance initializer");
}
@Override
public void f() {
System.out.println("Base1 In anonymous f()");
}
};
}
public static Base2 getBase2(final int i){
return new Base2(i){
{
System.out.println("anonymous constructer,i = " + i);
System.out.println("Base2 Inside instance initializer");
}
@Override
void f() {
super.f();
System.out.println("Base2 In anonymous f()");
}
};
}
public static void main(String[] args) {
Base base = getBase(47);
base.f();
Base1 base1 = getBase1();
base1.f();
Base2 base2 = getBase2(1);
base2.f();
}
}
abstract class Base {
Base(int i) {
System.out.println("Base constructor, i = " + i);
}
public abstract void f();
}
interface Base1{
void f();
}
class Base2{
Base2(int i){
System.out.println("Base2 constructor, i = " + i);
}
void f(){
System.out.println("Base2 f()");
}
}
这段代码输出:
Base constructor, i = 47
Inside instance initializer
In anonymous f()
Base1 Inside instance initializer
Base1 In anonymous f()
Base2 constructor, i = 1
anonymous constructer,i + 1
Base2 Inside instance initializer
Base2 f()
Base2 In anonymous f()