匿名的内部类究竟能不能继承其它类,有人说能,有人说不能只能实现接口,我觉得能,可我看了不少资料说不能,不知为什么?

解决方案 »

  1.   

    继承了可以重写父类的方法,别外还可以加些别的方法,好swing中的mvc模式中重写module常用到,不过我看了好多资料都说匿名的内部类不能继承其它类,不知道为什么,还是我的理解不误,我想确定一下
      

  2.   


    楼主的原话:匿名的内部类究竟能不能继承其它类!!匿名的内部类本身已经继承了其他类或者借口,又谈何究竟能不能继承其他类?如:下面的匿名的内部类已经继承了WindowAdapter(适配器)抽象类
    addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent w)
    {
    System.exit(0);
    }
    });
      

  3.   

    内部类当然可以继承其他类,而且这是一个很重要的特性,因为他可以使内部实现与外部引用隔离开,最典型的例子是Collection集合与Iterator的关系,如果看到过他们的源代码就可以知道在每个具体的Collection class中都有一个具体的Iterator class实现继承了Iterator接口,并使得Client programmer在外部引用时并不需要知道内部的变化而只认为其为一个Iterator,这就保证了例如LinkedList l = new LinkedList();
    Iterator itr = l.iterator();HashSet hs = new HashSet();
    itr = hs.iterator();对于Client programmer来说itr似乎可以在两个Collection中相互转换,但其实他们实现了不同的具体iterator class,而这些具体的iterator class正是封装在具体聚集类中的inner class@.@||~
      

  4.   

    应该说,匿名的内部类除了Object,只能有一个直接 父类 或 父接口.
    一般,匿名的内部类实现接口时,更愿意继承该接口的抽象实现(适配器)抽象类,这样可以少写无关的代码,功能也不会有任何损失.以hujiaboy(撑死你大爷) ( ) 的例子:匿名的内部类已经实现WindowListener接口:
    addWindowListener(new WindowListener()
    {
    public void windowClosing(WindowEvent w)
    {
    System.exit(0);
    }
    public void windowActivated(WindowEvent e){}
    public void windowClosed(WindowEvent e){}
    public void windowDeactivated(WindowEvent e){}
    public void windowDeiconified(WindowEvent e){}
    public void windowIconified(WindowEvent e){}
    public void windowOpened(WindowEvent e){}
    });
    同样功能的匿名的内部类继承了WindowAdapter(适配器)抽象类,比实现接口少了无用方法的实现
    addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent w)
    {
    System.exit(0);
    }
    });