0

理解匿名内部类有点麻烦

这是我拥有的代码。我知道 WindowAdapter 类是一个抽象类,那么“new WindowAdapter()”这一行是什么意思?我们是在创建一个抽象类的 WindowAdapter 类的对象吗?困惑!

Class Myframe extends Frame
{
    public static void main(String args[])
    {
        Myframe f=new Myframe();
        f.setVisible(true);
        f.setSize(300,300);
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}
4

5 回答 5

3

它正在创建一个匿名类的对象,该对象扩展WindowAdapter类而不编写代码来对其进行子类化。

来自Java 教程

匿名类使您能够使您的代码更简洁。它们使您能够同时声明和实例化一个类。它们类似于本地类,只是它们没有名称。

这是在不显式编写扩展的单独类的情况下创建子类对象的快捷方式WindowAdapter。关键是您需要方法代码内部的对象,因此您永远不会在其他地方引用它们,因此您不需要为他们创建一个单独的类。

于 2013-05-28T10:41:32.017 回答
1

它不再抽象,因为您已经使用 System.exit(0) 实现了抽象方法

于 2013-05-28T10:43:24.327 回答
0

它在运行时创建一个实现,WindowAdapter该实现由您提供的代码组成。它被称为anonymous,因为它没有名称,因此您不能通过名称引用它。当它执行一次时,它不能再次执行。

于 2013-05-28T10:44:00.270 回答
0

您正在继承WindowAdapter该类,并提供一个实现并同时实例化它。这就是这里基本上发生的事情。

这称为匿名内部类。

正如其他人在这里建议的那样,java教程包含对此的出色解释。

于 2013-05-28T10:46:21.793 回答
0

不,你不能直接创建抽象类的对象,但是你可以使用匿名内部类来做到这一点,你也可以在匿名类中实现自己的方法。请参考 - http://www.easybix.com/can-create-object-abstract-class/

于 2016-08-31T03:54:20.240 回答