你必须添加未实现的方法吗?

时间:2016-01-04 10:06:34

标签: java swing windowlistener

我正在尝试为JFrame关闭操作添加一个监听器:

addWindowListener(new WindowListener() {
    @Override
    public void windowClosing(WindowEvent e) {
        setVisible(false);
    }
});

问题是Eclipse一直告诉我必须“添加未实现的方法”,我认为它来自WindowListener。但是,我很困惑,为什么你需要实现所有这些其他方法,如果你只需要覆盖一个?如果我确实添加了所有其他方法,但不要在其中添加任何内容,例如

@Override
public void windowActivated(WindowEvent e) {}

此方法的默认行为是否会丢失?或者如果我在方法中写一些内容,它只会被覆盖吗?

3 个答案:

答案 0 :(得分:6)

如果实现接口,则必须实现所有方法。这也适用于匿名类。

使用link而非实施WindowListener

addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        setVisible(false);
    }
});

WindowAdapter是一个用空方法实现WindowListener的类,让你只覆盖你需要的那些。

PS:还有其他适合其他活动的适配器。例如。 WindowAdapterMouseAdapter

答案 1 :(得分:4)

是的,您必须实施所有方法。

这就是interfaces的工作方式:它们定义了实施者必须遵循的合同。如果该合同包含5种方法,那么您必须实施所有5种方法。

当存在相应数量的方法时,通常会使用适配器设计模式:创建一个不执行任何操作的默认实现的抽象类。

对于WindowListener界面,这是WindowAdapter。因此,您可以只扩展WindowListener并仅覆盖所需的方法,而不是实现WindowAdapter(及其所有方法)。

答案 2 :(得分:0)

没有默认行为,这就是您需要提供实现(预期行为)的原因。

只要你有一个具体的类扩展一个抽象类,或者实现一个接口,它必须为所有抽象方法提供一个实现。

这可以通过(其他)超类或类本身来完成,但是,它是强制性的。

一旦添加方法,就覆盖它,但由于之前没有实现,因此这些方法没有“默认行为”可以丢失。