此代码是否在不创建新类的情况下实例化或扩展抽象类?

时间:2013-07-09 05:09:48

标签: java inheritance

我对编程很新,但我已经在我的学校参加了Intro CS课程,所以我理解了大部分基础知识(或者我认为我做过)。我试图通过JOGL教自己一些OpenGL,我遇到了几行我无法理解的代码。我错过了什么吗?

frame.addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
    System.exit(0);
  }
});
  • 我检查了Javadoc,WindowAdapter是一个抽象类。那他怎么能实例化呢?

  • 或者这甚至创建了一个实例?

  • 它几乎看起来像代码扩展WindowAdapter或覆盖windowClosing方法,但是如果不编写新类怎么可能呢?

2 个答案:

答案 0 :(得分:20)

  

代码似乎扩展WindowAdapter或覆盖windowClosing方法

这正是发生的事情。

  

但如果不写新课程怎么可能呢?

实际上,代码创建一个新的(匿名)类。只是语法与你到目前为止所遇到的不同。看看tutorial

有关如何使用匿名类的讨论,请参阅How are Anonymous (inner) classes used in Java?

答案 1 :(得分:8)

使用的概念是匿名类!! .... 由于WindowAdapter是一个抽象类,你无法使它成为对象,但是使用Anonymous Class概念,你可以调用它的构造函数或使用函数而不将它分配给它的类型的对象。

使用Abstract类数据变量和方法的另一种方法是创建它的派生类

的对象

通过这种方式,您可以在参数中传递一个WindowAdpater实例,而不会出现任何错误。