函数参数:抽象 class 还是接口?
Function argument: abstract class or interface?
假设有这个 class 图,在 Java:
<Interface> <AbstractClass> <ConcreteClass>
Γ SomethingImpl1
ISomething <- AbstractSomething <--|
L SomethingImpl2
我想知道采用 Something
的函数参数应该是什么类型。
取 ICity
(依此类推...)和 ILocation
。如果ILocation
有设置城市的功能,例如:
void setCity(X city);
X 应该是什么? ICity
还是 AbstractCity
?正确的签名是什么?
ISomething
/ICity
是参数的正确类型,前提是该方法只需要接口提供的功能(通常应该是这种情况)。总的来说:
编码到你能做到的最小界面,
在 Java 中,尽可能将其设为 interface
(就像您所做的那样);这样,如果有充分的理由通过 AbstractSomething
/AbstractCity
实现它 而不是 ,您可以,并且仍然可以将它与该方法一起使用。
假设有这个 class 图,在 Java:
<Interface> <AbstractClass> <ConcreteClass>
Γ SomethingImpl1
ISomething <- AbstractSomething <--|
L SomethingImpl2
我想知道采用 Something
的函数参数应该是什么类型。
取 ICity
(依此类推...)和 ILocation
。如果ILocation
有设置城市的功能,例如:
void setCity(X city);
X 应该是什么? ICity
还是 AbstractCity
?正确的签名是什么?
ISomething
/ICity
是参数的正确类型,前提是该方法只需要接口提供的功能(通常应该是这种情况)。总的来说:
编码到你能做到的最小界面,
在 Java 中,尽可能将其设为
interface
(就像您所做的那样);这样,如果有充分的理由通过AbstractSomething
/AbstractCity
实现它 而不是 ,您可以,并且仍然可以将它与该方法一起使用。