java - 继承和组合困惑?

标签 java class oop inheritance composition

我有一个抽象类Area,它的子类为ProvinceDivisionDistrict城市

现在,我需要在 City 类中指定该 city 存在于哪个 district 中。因此,我将在 City 类(Composition)中有一个 District 类的实例,以便我可以传递特定 id Districtcity 并将其存储在数据库城市表中。但是,它不遵循组合规则。因为区有城市,而不是相反。

还有一个问题是这两个类都使用了继承和组合,我觉得这是不对的。

我已经尝试通过谷歌搜索和其他东西自己解决这个问题一周了。但是,我无法解决这个问题。我想这是我最后的希望了。 我该如何解决这个问题?有什么例子吗?

最佳答案

我在这里只看到抽象。您有一个区域,可以是分区城市 >,但这就是继承关系方面的情况。当然,这确实提出了一个问题:“除了足以为其创建继承层次结构的名称(而不是接口(interface))之外,省、省、地区或城市之间还有什么足够的共同点?”

请记住,继承(在某种程度上,接口(interface))始终被定义为is-a关系。也就是说,按照您的系统现在的情况,District is-an AreaCity < strong>是一个区域。这两种说法在纸面上听起来都不错,而且这种表述并没有什么问题。事实上,您可以将其移动到一个界面,这可能会很好。

您想要与该思维分开的是有一个关系,这就是组合所引入的内容。

这些关系可能是双向的,但这里的主要前提是:

  • 一个城市有一个
  • 一个城市有一个部门
  • 一个城市 有一个

...以上三个也有相同的对应City

使用这两种技术都可以,但你必须清楚:

  • 为什么您使用它们,以及
  • 何时最适合使用它们。

在这种情况下,感觉继承确实没有任何意义,因为 getName() 方法可以轻松通过四、不需要引入继承。

关于java - 继承和组合困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825609/

相关文章:

c++ - 模板模板参数 - 类型/值不匹配错误

php - 工厂 build 一个物体,是浪费还是不必要?

java - 客户端重启后如何重新获取InterProcessMutex

java - 将树保存为预购

java - java处理大文件

C++ delete [] 对象导致崩溃

与集合和泛型相关的 Java 10 迁移问题

php类变量

通配符、基类和子类的 Java 泛型问题

c++ - 如何修复这个: Argument of type “const char*” is incompatible with the parameter of type "char** [duplicate]