如何仅覆盖特定方法

Wou*_*ter 4 java methods overriding

我目前正在研究java me应用程序,我有这个代码:

svgForm.setSVGEventListener(new SVGEventListener(){
                public void keyPressed(int i) {
                    System.out.println("Val"+i);
                }
                public void keyReleased(int i) {
                    System.out.println("Val"+i);
                }
                public void pointerPressed(int i, int i1) {
                    return;
                }
                public void pointerReleased(int i, int i1) {
                    return;
                }
                public void hideNotify() {
                    return;
                }
                public void showNotify() {
                    return;
                }
                public void sizeChanged(int i, int i1) {
                    return;
                }
});
Run Code Online (Sandbox Code Playgroud)

但是,如您所见,我不需要覆盖所有方法.更糟糕的是,通过覆盖它们我失去了功能.有没有办法保留原始方法,只覆盖某些方法?

ska*_*man 11

你别无选择,需要全部实施.但是,一个常见的模式是有一个基类,它提供接口中方法的无操作实现,然后在需要做一些有用的事情时扩展该基类:

public class BaseSVGEventListener implements BaseSVGEventListener {
            public void keyPressed(int i) {}
            public void keyReleased(int i) {}
            public void pointerPressed(int i, int i1) {}
            public void pointerReleased(int i, int i1) {}
            public void hideNotify() {}
            public void showNotify() {}
            public void sizeChanged(int i, int i1) {}
}
Run Code Online (Sandbox Code Playgroud)

然后:

svgForm.setSVGEventListener(new BaseSVGEventListener (){
            public void keyPressed(int i) {
                System.out.println("Val"+i);
            }
            public void keyReleased(int i) {
                System.out.println("Val"+i);
            }
});
Run Code Online (Sandbox Code Playgroud)

有在Java AWT/Swing的API的许多这样的例子,例如FocusListenerFocusAdapter:

用于接收键盘焦点事件的抽象适配器类.此类中的方法为空.此类存在是为了创建侦听器对象的便利.

扩展此类以创建FocusEvent侦听器并覆盖感兴趣事件的方法.(如果实现了FocusListener接口,则必须定义其中的所有方法.这个抽象类为它们定义了所有的null方法,因此您只需要为您关心的事件定义方法.)

Java API调用这些"适配器",尽管这是对该术语的一个相当可疑的使用."适配器模式"应该用于使一种类型适应另一种类型,这不是这些API类所做的.