将新方法添加到由许多类直接实现的接口

时间:2014-01-06 09:21:18

标签: java interface

我对java接口有一个小问题

有没有办法在不修改实现它的类的情况下向java接口添加新方法。

条件是我不应该引入新的界面

3 个答案:

答案 0 :(得分:8)

  

有没有办法在不修改实现它的类的情况下向java接口添加新方法。

没有

  

条件是我不应该引入新的界面

如果条件还包括不修改直接实现接口的许多类,则会给您一个不可能完成的任务。

这就是为什么接口通常伴有抽象Adapter类的原因,这些类以无操作方式实现所有方法。实现类然后扩展适配器而不是实现接口,因此如果您需要添加接口,您只需要修改接口和适配器。

答案 1 :(得分:2)

你要做的事情根本不可能。除非(正如在评论中指出的那样)使用Java 8。

Java 8引入了默认或defender方法的概念,允许您向接口添加方法,并在接口中提供该方法的默认实现。

http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/

其余答案适用于8之前的任何Java版本:

接口描述了类中的方法。如果向接口添加新方法,则实现该接口的所有类都必须实现该方法。除非幸运的是,你添加的方法已经存在于每个实现类中,如果不添加新接口或更改类,这是不可能的。

如果您的接口是抽象类,那么您可以添加一个不执行任何操作的存根方法,并允许覆盖它,但接口没有可选方法的概念。

答案 2 :(得分:0)

通过使用抽象类,我们可以解决此问题。

   interface A{
     void a();
     void b();
    }

  Class a implement A 

  Class b implement A ...

如果有任何新方法可以创建抽象类并将该方法添加到其中

 abstract class adapter { 
       abstract void c();
     }

现在将此适配器类扩展为必要的类。