new AbsDemo() {}
这句话本身就表示定义一个匿名的继承自 AbsDemo 的内部类。花括号表示类的实现体,因为匿名,我们不可能像普通的使用 extends 来做,因为 extends 句法要求前面有个名字放着,这样它就不是匿名了。

解决方案 »

  1.   

    匿名类中的“匿名”指的是省去创建对象时等号左边的部分。一旦你决定了使用匿名类,也就意味着这个new出来的对象基本上是一次性使用,在new的同时也就使用它,并且使用完毕后即抛弃。
    现在回答你的问题:
    1,确实不像,但是就可以这样写,具体可以百度(编译器自动生成一个完整的类);
    2, 匿名类很特殊,可以没有extends,直接new 抽象类 or 接口,后面跟上重写的方法,就在堆空间中直接生成具有新的方法的实例对象了,这时候使用“ . ”加具体方法就可以直接调用。
    3,在监听器环节有大量的匿名类的使用,学到那个部分应该你就茅塞顿开了。
      

  2.   

    首先纠正一下你的错误,new OutName().use();这句代码中的"OutName()"应该是前面的类"Outer()"才对啊。你定义的匿名类,顾名思义,就是看不见类的对象的名字,也就不会出现用extends语句,extends 用于继承类,=左边就是类名和类的对象名,这样就不叫匿名,因为可以看见类的对象的名字。类可以直接调用它的方法,
    new AbsDemo()
     {
         void show()
         {
               System.out.println("ABSin show");
         }
     }.show();上面这段代码写成这样是等效的:
    AbsDemo  abs=new  AbsDemo();
    {
         public void show()
         {
                 System.out.println("ABSin show");
          }
    }匿名类就这样,相信你应该懂了。
      

  3.   

    AbsDemo  abs=new  AbsDemo();//你这里是多态吗?
    {
         public void show()
         {
                 System.out.println("ABSin show");
          }
    }.show();//这里的show方法是不是缺了?