Anonymous  Inner  Class  (匿名内部类)  是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?    
    
回答: 匿名的内部类是没有名字的内部类。不能extends(继承)  其它类,但一个内部类可以作为一个接口,由另一个内部类实现。    -------------------------------------------------求一个最简单的 匿名的内部类 的 声明  和 使用 的列子  请高手帮助

解决方案 »

  1.   

    事件处理里用的比较多openButton.addActionListener( 
                    new ActionListener(){ 
                        public void actionPerformed(ActionEvent event){ 
                            openFile(); 
                             
                            if (fileName == null) 
                                return; 
                             
                            analysisFileOrDir(fileName); 
                             
                            for(File file : list){ 
                                analyze(file); 
                            }        
                        } 
                    }); 
      

  2.   

    this.getHibernateTemplate().execute(new HibernateCallback() {
    public Object doInHibernate(Session session)throws HibernateException, SQLException {
    criteria.setProjection(Projections.rowCount());
    return (Integer) (criteria.list().iterator().next());
    }
    });
      

  3.   

    interface C {
    public void g(); // 1#
    }class D {
    public void h(C c) {// 2#
    c.g();
    } public static void main(String[] args) {
    D d = new D();
    d.h(new C() { // 3#
    @Override
    public void g() {
    System.out.println("ok");
    }
    });
    }
    }
    class A {
    public void f() {
    System.out.println("A");
    }
    }
    class B {
    A a = new A() { // 1#
    @Override
    public void f() {
    System.out.println("B");
    }
    };
    }对1#的解释:
    A类型引用变量a不是引用A类型实例,而是A子类的实例!
    “声明A类型引用变量a。然后,声明一个新类,它没有名字,但是,这是A的子类。这里的大括号打开该类的定义……”class A {
    public void f() {
    System.out.println("A");
    }
    }
    class B {
    A a = new A() { };  //2#
    }
    public class Test {
    public static void main(String[] args) {
    B b = new B();
    b.a.f();  //3#
    }
    }Output:
    A注意2#处并没有对父类方法的重写。但是3#处调用了A类的方法(继承而来的f()方法)匿名内部类实现接口的例子:interface C {
    public void g(); // 1#
    }class D {
    public void h(C c) {  // 2#
    c.g(); //4#
    } public static void main(String[] args) {
    D d = new D();
    d.h(new C() { // 3#
    @Override
    public void g() {  //5#
    System.out.println("ok");
    }
    });
    }
    }注意,在2#处方法的参数是接口类型的引用。
    再看我们在3#处传进去的地什么!我们创建了一个实现了C接口的匿名内部类,并将其引用传给了方法h(),并在h()方法执行到4#处时多态调用了5#处的匿名内部类的方法体代码。
    另外特别注意:3# “new C() { …… }”,发现什么了吗?C是接口,但是我们对它用了new(而不是implements)! 这也是Java中唯一在接口前使用new的地方(呵,太武断了,据我现在所知是如此)。回答一下4楼的问题,对象可是在运行时才存在的啊,它必须用new来上创建并存活在堆上。这里是定义了一个没有名字的类,并在运行时创建它。