假设有这样的类图,在Java中:
<Interface> <AbstractClass> <ConcreteClass>
Γ SomethingImpl1
ISomething <- AbstractSomething <--|
L SomethingImpl2
我想知道的是采用 Something
的函数参数应该具有什么类型。
以ICity
(依此类推...)和ILocation
为例。如果ILocation
有设置城市的函数,例如:
void setCity(X city);
X 应该是什么? ICity
还是 AbstractCity
?正确的签名是什么?
最佳答案
ISomething
/ICity
是参数的正确类型,前提是该方法仅需要接口(interface)提供的功能(通常应该是这种情况)。一般来说:
尽可能编写最少的接口(interface),并且
在 Java 中,尽可能将其设为
接口(interface)
(正如您所做的那样);这样,如果有充分的理由不通过AbstractSomething
/AbstractCity
实现它,您就可以并且仍然将它与该方法一起使用。
关于java - 函数参数 : abstract class or interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367633/