您必须添加未实现的方法吗?
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
(及其所有方法)。
我正在尝试向 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
(及其所有方法)。