是否在使用匿名内部类时创建了抽象类的对象?

时间:2013-05-28 10:38:19

标签: java

在理解匿名内部课程时遇到一些麻烦

这是我的代码。我知道WindowAdapter类是一个Abstract类,那么“new WindowAdapter()”是什么意思?我们是否正在创建一个WindowAdapter类的对象,它是一个抽象类.Confused !!!

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);
            }
        });
    }
}

5 个答案:

答案 0 :(得分:3)

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

来自Java Tutorials

匿名类使您可以使代码更简洁。它们使您能够同时声明和实例化一个类。它们就像本地类,除了它们没有名称。

这是创建子类对象的快捷方式,而无需显式编写扩展WindowAdapter的单独类。重点是您需要方法代码中的对象,因此您永远不会在其他地方引用它们,所以你不需要为它们创建一个单独的类。

答案 1 :(得分:1)

由于您使用System.exit(0)

实现了抽象方法,因此它不再抽象

答案 2 :(得分:0)

它在运行时创建WindowAdapter的实现,实现包含您提供的代码。它被称为anonymous,因为它没有名称,因此您无法按名称引用它。当它执行一次时,它不能再次执行。

答案 3 :(得分:0)

您是WindowAdapter类的子类,您提供了一个实现并同时实例化它。这就是基本上发生的事情。

这称为匿名内部类。

正如其他人所建议的那样,java tutorials包含了很好的解释。

答案 4 :(得分:0)

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