假设在Java中有这个类图:
<Interface> <AbstractClass> <ConcreteClass>
Γ SomethingImpl1
ISomething <- AbstractSomething <--|
L SomethingImpl2
我想知道的是Something
的函数参数应该是什么类型。
选择ICity
(依此类推......)和ILocation
。如果ILocation
具有设置城市的功能,例如:
void setCity(X city);
X 应该是什么? ICity
或AbstractCity
?什么是正确的签名?
答案 0 :(得分:3)
ISomething
/ ICity
是参数的正确类型,前提是该方法只需要接口提供的功能(通常应该是这种情况)。一般来说:
您可以使用最小接口编码,
在Java中,尽可能使interface
成为可能(正如您所做的那样);这样,如果有充分的理由通过AbstractSomething
/ AbstractCity
实现 not ,您可以,并且仍然可以将其与方法一起使用。