18

我对编程很陌生,但我在学校上过介绍 CS 课程,所以我了解了大部分基础知识(或者我认为我了解了)。我正在尝试通过 JOGL 自学一些 OpenGL,但遇到了几行我无法理解的代码。我错过了什么吗?

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

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

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

4

2 回答 2

20

它几乎看起来像代码扩展WindowAdapter或覆盖了windowClosing方法

这正是正在发生的事情。

但是如果不写一个新的类怎么可能呢?

事实上,代码正在创建一个新的(匿名)类。只是语法与您迄今为止遇到的不同。看看教程

有关如何使用匿名类的讨论,请参阅Java 中如何使用匿名(内部)类?

于 2013-07-09T05:11:41.457 回答
8

使用的概念是匿名类!.... 由于 WindowAdapter 是一个抽象类,您不能将其设为对象,但使用匿名类概念,您可以调用其构造函数或使用函数,而无需将其分配给其类型的对象..

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

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

于 2013-07-09T05:16:22.157 回答