在Java中实现接口并覆盖方法?

| 为什么必须重写接口的所有方法? 例如,如果我有
public class Foo extend JFrame implements ActionListener, KeyListener {
      foo(){
      }
    @Override
    public void keyPressed(KeyEvent arg) {          
    }

    @Override
    public void keyReleased(KeyEvent arg) {
}

    @Override
    public void keyTyped(KeyEvent arg) {        
    }
}
我将有很多我什至不会使用的方法,有没有一种方法可以删除未使用的已实现方法,例如,如果我计划从界面中使用一种方法 我也不想使用抽象,因为这意味着我无法创建对象的实例(至少我的编译器这样说)     
已邀请:
具体的类必须始终实现接口的所有方法。如果您尚未扩展
JFrame
,则可以扩展
KeyAdapter
。它为ѭ3实现了空方法,以避免将其写出。您可以在
Foo
类的内部使用匿名类,如下所示:
addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
        // handle typed key here
    }
});
    
接口没有默认实现。如果没有被迫在接口中实现每个方法,那么当其他一些代码试图通过接口调用这些方法时会发生什么呢?     
您可以使Foo的父类具有这些空方法,并使Foo仅实现您要查看的方法。 在实现接口时,必须在某个地方实现其所有方法才能创建具体对象。     
这正是
KeyAdapter
类的用途:它实现接口的所有方法(但任何实现都不做任何事情)。由于不能扩展两个类,因此应该为侦听器使用内部类(无论如何,这都是更简洁的设计):
public class Foo extend JFrame {
      foo(){
          ...
          component.addKeyListener(new MyKeyListener());
          ...
      }

    private class MyKeyListener extends KeyAdapter{
        @Override
        public void keyPressed(KeyEvent arg) {          
        }
    }
}
    
如果实现接口,则意味着可以在需要实现的任何情况下使用实现的对象。从这个角度来看,很明显,您必须实现接口的所有方法,否则您不能真正说出已经实现了它。例如如果我有一个带有
Add
Subtract
方法的
ICalculator
接口,而您只想实现
Add
,那么生成的类是否真的可以被需要ICalculator的另一个项目使用? 但是,我很理解您对于在当今的框架中实现某些接口的不满,因为它们明显违反了接口隔离原则。这意味着某些接口是多种功能的集合,可以一起使用以完成一些有用的操作。例如。如果使用ICalculator接口,而不仅仅是基本的
Add
Divide
等方法,我开始添加like14ѭ之类的方法,这些方法对于
Calculator
对象的本质而言不是必需的。 底线是的,您必须实现接口的每个成员,但是,如果您确定并知道其中的某些成员将永远不会被使用,请随时将它们留空,甚至更好,它们会引发异常,因此您将确保永远不会真正意味着永远不会。     
您确实应该抓住一本关于面向对象编程的好书,然后重新阅读第一章。接口是方法的完全抽象的定义,因此您不能部分实现接口。     

要回复问题请先登录注册