我有一个抽象类Area
,它的子类为Province
、Division
、District
和城市
。
现在,我需要在 City
类中指定该 city
存在于哪个 district
中。因此,我将在 City
类(Composition)中有一个 District
类的实例,以便我可以传递特定 的
到 id
Districtcity
并将其存储在数据库城市表中。但是,它不遵循组合规则。因为区有城市,而不是相反。
还有一个问题是这两个类都使用了继承和组合,我觉得这是不对的。
我已经尝试通过谷歌搜索和其他东西自己解决这个问题一周了。但是,我无法解决这个问题。我想这是我最后的希望了。 我该如何解决这个问题?有什么例子吗?
最佳答案
我在这里只看到抽象。您有一个区域
,可以是省
、分区
、区
或城市
>,但这就是继承关系方面的情况。当然,这确实提出了一个问题:“除了足以为其创建继承层次结构的名称(而不是接口(interface))之外,省、省、地区或城市之间还有什么足够的共同点?”
请记住,继承(在某种程度上,接口(interface))始终被定义为is-a关系。也就是说,按照您的系统现在的情况,District
is-an Area
和 City
< strong>是一个区域
。这两种说法在纸面上听起来都不错,而且这种表述并没有什么问题。事实上,您可以将其移动到一个界面,这可能会很好。
您想要与该思维分开的是有一个关系,这就是组合所引入的内容。
这些关系可能是双向的,但这里的主要前提是:
- 一个
城市
有一个区
。 - 一个
城市
有一个部门
。 - 一个
城市
有一个省
。
...以上三个也有相同的对应City
。
使用这两种技术都可以,但你必须清楚:
- 为什么您使用它们,以及
- 何时最适合使用它们。
在这种情况下,感觉继承确实没有任何意义,因为 getName()
方法可以轻松通过四、不需要引入继承。
关于java - 继承和组合困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825609/