1 package test_15_3; 2 3 public abstract class Base { 4 5 public Base(int i) { 6 System.out.println("Base constructor, i = " + i); 7 } 8 9 public abstract void f(); 10 }
1 package test_15_3; 2 3 public class AnonymousConstructor { 4 5 public static Base getBase(int i) { 6 // 变量i不一定是final的,因为i被传递给匿名类的基类的构造器,并不会在匿名内部类中直接使用 7 return new Base(i) { 8 // 通过实例初始化,达到为匿名内部类创建一个构造器的效果 9 { 10 System.out.println("Inside instance initializer"); 11 } 12 13 @Override 14 public void f() { 15 System.out.println("In anonymous f()"); 16 } 17 }; 18 } 19 20 public static void main(String[] args) { 21 22 Base base = getBase(10); 23 base.f(); 24 } 25 }
结果如下:
Base constructor, i = 10
Inside instance initializer
In anonymous f()