我想应该是创建一个Inner类的实例,比如
set a=new Inner(){.......}

解决方案 »

  1.   

    哦,那么new Inner("xxx"){ };这么写应该是创建了一个Inner类的匿名子类了吧?
      

  2.   

    我想应该是创建了一个Inner类的实例
      

  3.   

    你是说这两种写法都是创建了一个Inner类的实例吗?
      

  4.   

    new这个关键字不就是用来创建实例的么
      

  5.   

    哪你看这个程序片断,创建的到底是什么类的匿名实例?:
      public void doAnonymous()
      {
        System.out.println((new InnerInterface() { }).someConstant);    (
          // Anonymous class extending the inner class
          new InnerClass()
          { 
            public void doSomething()
            { 
              secret="secret is changed";
              super.doSomething();
            }
          }
        ).doSomething();
      }
      

  6.   

          new InnerClass()
          { 
            public void doSomething()
            { 
              secret="secret is changed";
              super.doSomething();
            }
          }
        ).doSomething();
    可能这段代码这样说你会更明白点:
    有一个类叫Inner,上面的代码创建了它的一个实例,然后调用它的doSomething()方法。
      

  7.   

    那么难道创建了Inner类的一个实例,这个实例可以“覆盖”掉原来的doSomething()方法吗?
      

  8.   

    你说的"原来的doSomething()"是指super.doSomething()么?
      

  9.   

    对,啊,整个程序太长,贴出来不好看
    但是这个Inner类是继承了一个完全空的抽象类的。所以看不明白这个片断,能解释一下吗?
      

  10.   

    new Inner(){ }  这种写法是说创建了Inner类的一个匿名子类,
    这样的匿名类的创建在scjp中经常会考的。
    new Inner()   这才是创建Inner类的实例。
    new Inner("xxx") { } 这是说把参数"xxx"通过super("xxx")通用Inner类的Constructor Inner(String parm)。
      

  11.   

      你说:
       new Inner("xxx") { } 这是说把参数"xxx"通过super("xxx")通用Inner类的Constructor Inner(String parm)。我还不是恨明白,能讲讲清楚吗?
      

  12.   

    new Inner("xxx") { } 这就是说在创建Inner类的一个匿名子类,任何一个类如果没有定一个constructor的话,系统会自动加上default constructor,而且任何一个constructor都存在一句话叫做:super()或者super(...),如果你自己没有写的话,系统会自动添加前者,对于匿名类,系统会自动根据创建的方式确定调用super() 还是 super(...)。
    这样解释可以了吗?
      

  13.   

    也就是说new Inner("xxx") { }用的是super(XXX)构建器,对么?
      

  14.   

    liukuncn(旺旺): 是这样的。
      

  15.   

    完全正确的理解如下:  Anonymous classes can implement an interface (implicit extension of Object) or explicitly extend a class. Cannot do both.new interfacename() { } <==> new super() extends Object implements interfacename
    or 
    new classname(can take arg.) { }<==> new super() extends classname