java - 函数参数 : abstract class or interface?

标签 java inheritance interface abstraction

假设有这样的类图,在Java中:

<Interface>   <AbstractClass>      <ConcreteClass>      

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

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

ICity(依此类推...)和ILocation为例。如果ILocation有设置城市的函数,例如:

void setCity(X city);

X 应该是什么? ICity 还是 AbstractCity?正确的签名是什么?

最佳答案

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

  1. 尽可能编写最少的接口(interface),并且

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

关于java - 函数参数 : abstract class or interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367633/

相关文章:

java - 对于原子类,Java 如何按值管理调用?

java - m_coloring 的蒙特卡罗估计

python - 封装 TensorFlow 计算图的类中的类继承

java - 处理无效 REST API 参数的内部 Java 代码最佳实践

java - 在 Spring Boot 中将日期作为请求参数处理出现错误

c# - 覆盖已经被覆盖的虚函数

C++ 多重继承和虚表

javascript - 使用 TypeScript 扩展 Object.prototype

c# - 为什么参数化通用接口(interface)的 GetMethods() 返回非参数化 MethodInfo

java - 为什么 java.lang.Class 的 getInterfaces() 方法返回 Class<?>[] 而不是 Class<? super T>[]?