看这样一段话:
在匿名类中不可能有命名构造器(因为它根本没有名字) 但 通过实例初始化 就能够达到为匿名内部类创建一个构造器的效果 就像这样:
//: innerclasses/AnonymousConstructor.java
// Creating a constructor for an anonymous inner class.
import static net.mindview.util.Print.*;abstract class Base {
  public Base(int i) {
    print("Base constructor, i = " + i);
  }
  public abstract void f();
} public class AnonymousConstructor {
  public static Base getBase(int i) {
    return new Base(i) {
      { print("Inside instance initializer"); }
      public void f() {
        print("In anonymous f()");
      }
    };
  }
  public static void main(String[] args) {
    Base base = getBase(47);
    base.f();
  }
} /* Output:
Base constructor, i = 47
Inside instance initializer
In anonymous f()
*///:~
请问:
这个 “实例初始化” 是什么意思 它是怎样达到为匿名内部类创建一个构造器的效果
谢谢

解决方案 »

  1.   

    你都写出来了,还有什么疑问?
    其实和普通的类一样用啊 就是有它自己的规则而已
    至于这规则怎么定的你到sun公司去问吧
      

  2.   

    new Base(i) { 
          { print("Inside instance initializer"); } 
          public void f() { 
            print("In anonymous f()"); 
          } 
        }; 
    可以整体理解为 实例初始化 
    只不过是带类体描述的
      

  3.   

    import static net.mindview.util.Print.*; abstract class Base { 
      public Base(int i) { 
        print("Base constructor, i = " + i); 
      } 
      public abstract void f(); 
    } public class AnonymousConstructor { 
      public static Base getBase(int i) { 
        return new Base(i) { 
          { print("Inside instance initializer"); } 
          public void f() { 
            print("In anonymous f()"); 
          } 
        }; 
      } 
      public static void main(String[] args) { 
        Base base = getBase(47); 
        base.f(); 
      } 
    } /* Output: 红色部分就是实力初始化,跟普通类是一样的道理class A{
        {
            System.out.println("initializer");
        }
        A(int i){
            System.out.println("constructor");
        }
    }
    当new A()时,{}中的语句会在构造体之前执行,在匿名内部类中,由于没有构造器,所以可以在{}里添加期望的初始化工作。