函数参数:抽象类还是接口?

时间:2017-09-22 14:54:35

标签: java inheritance interface abstraction

假设在Java中有这个类图:

<Interface>   <AbstractClass>      <ConcreteClass>      

                                   Γ SomethingImpl1
ISomething <- AbstractSomething <--|
                                   L SomethingImpl2

我想知道的是Something的函数参数应该是什么类型。

选择ICity(依此类推......)和ILocation。如果ILocation具有设置城市的功能,例如:

void setCity(X city);

X 应该是什么? ICityAbstractCity?什么是正确的签名?

1 个答案:

答案 0 :(得分:3)

ISomething / ICity是参数的正确类型,前提是该方法只需要接口提供的功能(通常应该是这种情况)。一般来说:

  1. 您可以使用最小接口编码,

  2. 在Java中,尽可能使interface成为可能(正如您所做的那样);这样,如果有充分的理由通过AbstractSomething / AbstractCity实现 not ,您可以,并且仍然可以将其与方法一起使用。