在匿名类中实例化~上代码:帮忙解释下.....

解决方案 »

  1.   

    这是匿名的内部类
    并不是FileNameFilter的实例化,而是定义了一个内部类,实现了accept接口,同时返回一个实现了接口的对象。该代码等效于class A implements FileNameFilter
    {public void accept(File f,String s)
    {
     //实现接口
    }
    }dir.list(new A())
      

  2.   

    new 接口或者抽象类()
    {
           方法
    }这种写法 返回的是接口或者抽象类的子类对象
    名称叫 匿名内部类
      

  3.   

    匿名内部实现类同下:Thread thread = new Thread(new Runnable(){
      
       public void run(){
             ...
       }});
      

  4.   

    举个例子java.io.Serializable ser = new Serializable(){};
      

  5.   

    关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类。
      存在它的原因是:
      1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。
      2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。
      3.匿名内部类可以很方便的定义回调。
      4.使用内部类可以非常方便的编写事件驱动程序。其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。
    接口和回调:编程一个常用的模式是回调模式,在这种模式中你可以指定当一个特定时间发生时回调对象上的方法。
      

  6.   

    可以参照一下,java.util.MAP,与java.util.HashMap.
      

  7.   

    你这个相当于实现 并复写FileNameFilter接口的 accept方法
      

  8.   

    swing里面实现监听 ,这种写法很多,去看看就懂了
      

  9.   

    路过,楼主的写法相当于写了一个类实现了FilenameFilter接口,只是这个类是没有指定名字的,后面会有{...}就是要重写FilenameFilter接口中的方法的,因为楼主的意图是只让这个类在此处用到,所以这种实践是良好的实践,可见楼主对Java了解较深,然后匿名的类用了new关键字就相当于创建了一个对象,所以这种实例化过程与单独编写一个类实现FilenameFilter接口的效果是相似的,只不过后者可以再多处用到,可以复用。