我对java接口有一个小问题
有没有办法在不修改实现它的类的情况下向java接口添加新方法。
条件是我不应该引入新的界面
答案 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();
}
现在将此适配器类扩展为必要的类。