可以重载接口的实现吗?

问题描述:

我最近不得不将一个简单的类分成两个版本,旧版客户端的旧版本以及已迁移到单独界面的新版本。可以重载接口的实现吗?

由于有很多常见的代码,我将它拆分为2个具体类的抽象类。随着结构如下:

interface ParentInt { 
    // Common methods 
} 

interface ChildIntA extends ParentInt { 
    // Legacy methods 
} 

interface ChildIntB extends ParentInt { 
    // New model methods 
} 

abstract class AbstParentClass implements ParentInt { 
    // ... 
} 

class LegacyConcreteClass extends AbstParentClass implements ChildIntA { 
    // ... 
} 

class NewConcreteClass extends AbstParentClass implements ChildIntB { 
    // ... 
} 

什么我不知道是是否有我可能会遇到因为AbstParentClass实现ParentInt和两个具体的类也实现此接口的孩子有什么缺陷?这种情况可能会有更好的模式吗?

无论AbstParentClass是否实现了这个指令,我的代码目前都能正常工作。事实上,因为两个具体类在不同的线程中分别实例化,所以AbstParentClass从来不会直接在其他任何地方引用。

在我的情况下,接口是API的一部分,因此不能从我的POV更改。

+0

即使它们相互扩展,您也应该能够从尽可能多的接口继承。你不能从多于一个类继承(但你不这样做,所以你应该没问题:)) – span 2011-12-14 13:59:37

+1

每个人都在评论有关缺少的“扩展AbstParentClass”的子类声明;我相信这只是一个疏忽,因为这显然不是真正的代码。我已经添加了这些声明,以便我们可以讨论真实情况。 – 2011-12-14 14:05:29

这种方法没有问题。我理解你对这种明显的“多重继承”的担忧,但Java处理接口的方式确保这种事情永远不会成为问题。具有相同签名的接口方法是“融合”的,只有一种实现方法是允许或需要的,无论有多少相同的接口方法被继承。

有没有技术的问题。在你的应用程序中是否有意义是一个单独的问题,但我们不知道答案是否足够。

另一件可能会或可能不会成为问题的事情是新界面特别与传统界面相关联。如果传统界面消失,您需要解开这两个界面,或者保留这个界面。

通过让新类实现两个接口,可能会更容易将它们分开。扩展抽象基类是否有意义变得有点模糊。