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

Do you have to add unimplemented methods?

我正在尝试向 JFrame 关闭操作添加侦听器:

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

问题是 Eclipse 一直告诉我必须 "add unimplemented methods",我假设它来自 WindowListener。不过,我很困惑,如果您只需要重写一个方法,为什么还需要实现所有这些其他方法?如果我确实添加了所有其他方法,但不要在其中添加任何内容,例如

@Override
public void windowActivated(WindowEvent e) {}

此方法的默认行为会丢失吗?或者只有当我在方法中写一些东西时它才会被覆盖?

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

只要您有具体的 class 扩展抽象 class 或实现接口,它就必须为所有抽象方法提供实现。

这可以通过(其他)超级 class 或在 class 本身中完成,但是是的,这是强制性的。

您在添加方法后立即覆盖它,但由于没有以前的实现,因此这些方法没有 'default behaviour' 可能会丢失。

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

使用 WindowAdapter 而不是实施 WindowListener

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

WindowAdapter 是一个 class,它使用空方法实现 WindowListener,让您只覆盖您需要的方法。

PS: swing 中还有用于其他事件的其他适配器。例如。 MouseAdapter, KeyAdapter

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

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

当有相应数量的方法时,通常会放置适配器 design-pattern:创建一个抽象 class,它提供不执行任何操作的默认实现。

WindowListener interface, this is WindowAdapter。因此,您可以扩展 WindowAdapter 并仅覆盖您想要的方法,而不是实现 WindowListener(及其所有方法)。