newFrame.addWindowListener(new WindowAdapter(){ //WindowAdapter是抽象类
public void windowClosing(WindowEvent e) 

new test("Second").setVisible(true); } 
}); 
可为什么能生成内部匿名类呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【Java_gannbare】截止到2008-07-29 10:06:47的历史汇总数据(不包括此帖):
    发帖的总数量:4                        发帖的总分数:130                      每贴平均分数:32                       
    回帖的总数量:6                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:4                        结贴的总分数:130                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    Adapter是中委托式事件处理机制
    它可以帮我们把Listener中所有的方法都给实现出来,然后可以改掉想要处理的方法就可以了
    这个程序可以理解为:newFrame.addWindowListener(this);然后你要去实现WindowListener接口中的各个方法
    但你现在使用了WindowAdapter(继承了Adapter),你就可以只要实现你想要的方法----windowClosing
      

  3.   

    匿名内部类是一个新的类,它继承了WindowAdapter类。
    这只是特殊的语法,编译的时候会给它起个名字,并写上
    class 类名 extends WindowAdapter{
    }
      

  4.   

    匿名内部类可以使用接口或者抽象类,只要你把所有的抽象方法都实现就可以了。
    至于原理,可以看我写的一个帖子:
    http://topic.csdn.net/u/20080728/20/d60f719a-c103-44b8-8d0c-bc1c818b768a.html
      

  5.   

    abstract A{}new A()
    是出错的...是不是?抽象类不能直接生成对象.可是上述的匿名抽象类居然可以
      

  6.   

    匿名的就不是抽象类了
    new WindowAdapter(){
    }
    花括号中的内容是具体实现.
      

  7.   

    这里的匿名内部类是继承于WindowAdapter的,是没有名字引用的。