我有一个接口A,有两种方法:
public interface A{
method One();
method Two();
}我对interface B有两种选择
案例1:
public interface B{
method One();
method Two();
method Three();
}案例2:
public interface B extends A{
method Three();
}有谁能告诉我这两种情况中哪一种更适合实施,为什么呢?第二种情况的缺点是什么?
编辑:在界面B中,我需要界面A的两种方法,所以,我认为扩展会更好。有些类只需要方法一和方法二,在那里实现接口A,在需要方法一、方法二和方法三的地方,我实现了接口B。
发布于 2014-08-25 12:00:40
这取决于你的逻辑。考虑这两对接口:
interface House {
int doorCount();
int windowCount();
}
interface Automobile {
int doorCount();
int windowCount();
int wheelCount();
}没有一个头脑正常的人会通过扩建房子来获得Automobile,因为汽车不是有轮子的房子。
另一方面,在这种情况下
interface House {
int doorCount();
int windowCount();
}
int Mansion extends House {
int poolCount();
}从House派生出来是有意义的,因为Mansion是一种具有“附加特性”的House。
发布于 2014-08-25 11:53:21
这取决于你需要做什么。如果method Three()引入了从设计角度来看应该封装到另一个单元(例如接口或类)的功能,那么使用2,如果它的功能类似,使用1。
编辑:还有一个选项:接口之间没有扩展,具体类可以同时实现它们,但同样取决于您需要什么
EDIT2:编辑之后,它仍然没有多大的区别。静态类可以实现两个接口或一个接口,还可以对两个类使用多态赋值。例如,如果class concreteA implements interfaceA和clas concreteB implements interfaceB或class concreteB implements interfaceA, interfaceB仍然可以执行InterfaceA classB = new concreteB();
发布于 2014-08-25 11:55:56
如果使用案例1,并且已经有针对类型A编写的客户端代码,那么它将无法处理实现B的类的实例,这完全是因为一个繁文缛节的原因:B在概念上是A的一个扩展,但在Java系统中建模为一个完全不同的类型。
示例:
static void existingMethod(A a) {
...work with a ...
}
class ImplB implements B { ... }
public static void main(String... args) {
B b = new B();
existingMethod(b); // compile error for Case 1; Case 2 compiles fine.
}因此,让您的B类型扩展A更有意义。
https://stackoverflow.com/questions/25485271
复制相似问题