Java的WindowAdapter
类被定义为抽象类,并且有许多抽象方法,包括:
windowClosing()
windowClosed()
windowActivated()
所有这些方法都是空的,Java表示该类存在是为了方便那些不想创建实现WindowListener
的类的人。因为与WindowListener
接口不同,WindowAdapter
使我们可以选择只实现其中定义的一种抽象方法。
例如,如果我将以下代码添加到继承自Window
的类中,我会通过' x'使窗口可关闭。右上角的按钮:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
dispose();
}
});
然而这让我感到困惑。首先,究竟发生了什么?我是否在创建一个扩展WindowAdapter
的内部类? new
关键字通常用于创建实例,但显然我不允许实例化抽象类。那么为什么new
关键字在这里?
其次,为什么我只能在WindowAdapter
中实现一种抽象方法?
通常在Java中,如果我定义一个抽象类:
public abstract class UpperClassAb {
public abstract void test();
public abstract int boa();
}
然后尝试使用此类,就像我使用上面的WindowAdapter
:
UpperClassAb tester = new UpperClassAb() {
public void test() {
System.out.println("mor");
}
};
我收到错误,因为我没有实现所有抽象方法,只有其中一个。在WindowAdapter
的情况下,如何实现一种抽象方法?这是一个案例,如果没有,我可以模仿这种行为吗?
答案 0 :(得分:2)
虽然WindowAdapter是一个抽象类,但它的方法不是抽象的,而是空的。因此,您不必实现它们,但如果需要,可以覆盖它们。
https://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowAdapter.html
关于new关键字:这称为匿名类。您基本上创建一个没有名称的新类,并同时实例化它。所以新类没有名称,它扩展了WindowAdapter,覆盖了一个方法,并且只能在这个位置实例化(因为它没有名字)
答案 1 :(得分:0)
如果您正在尝试实现WindowListener,则应为所有方法提供实现。这里窗口适配器只是抽象类,它为窗口事件提供部分实现。因此,您可以提供特定事件的实现(例如windowclose)