Java中的关联是什么,为什么需要它?
例如,一个人只能拥有一本护照。那是一种"一对一"的关系。
如果我们谈论银行与雇员之间的关联,那么银行可以有很多雇员,因此这是一种"一对多"的关系。
同样,每个城市都只存在于一个州中,但是一个州可以有多个城市,这是一种"多对一"的关系。
最后,如果我们谈论教师与学生之间的关联,则可以将多个学生与一个老师关联,并且可以将一个学生与多个老师关联,但是两者可以独立创建或者删除。这是"多对多"关系。
让我们以示例的方式了解关联。
package MyPackage; import java.util.*; class CityClass { private String cityName; public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } @Override public String toString() { return cityName; } } class State { private String stateName; List<CityClass> citys; public String getStateName() { return stateName; } public void setStateName(String stateName) { this.stateName = stateName; } public List<CityClass> getCities() { return citys; } public void setState(List<CityClass> citys) { this.citys = citys; } } public class AssociationExample { public static void main(String[] args) { State state = new State(); state.setStateName("California"); CityClass city = new CityClass(); city.setCityName("Los Angeles"); CityClass city2 = new CityClass(); city2.setCityName("San Diago"); List<CityClass> empList = new ArrayList<CityClass>(); empList.add(city); empList.add(city2); state.setState(empList); System.out.println(state.getCities()+" are cities in the state "+ state.getStateName()); } }
如我们所见,在此示例程序中,有两个类,即州和城市。
这两个单独的类通过其对象关联。
此外,每个城市仅存在于一个州中,但是一个州可以有许多城市,因此称为"多对一"关系。
重要的是,Java中的关联具有两种特殊形式。
让我们检查一下。
两种形式的结社
组合和聚合是两种特殊的关联形式。
让我们在一个示例的帮助下检查一下它们。
组合
这是一种"属于"类型的关联。
它仅表示一个对象是一个逻辑上较大的结构,其中包含另一个对象。
换句话说,它是较大对象的一部分或者成员。
替代地,它通常被称为"具有关系"(与"是"关系相反,后者是继承)。
例如,建筑物有一个房间,换句话说,房间属于建筑物。
合成是一种强烈的"具有"关系,因为对象的生命周期是紧密联系在一起的。
这意味着,如果我们销毁所有者对象,它的成员也将被销毁。
例如,如果建筑物被破坏,则在前面的示例中,房间也将被破坏。
但是,请注意,这并不意味着包含对象的任何部分都不可能存在。
例如,如果我们拆除建筑物内的所有房间,建筑物将仍然存在。
聚合
聚合也是一种" has-a"关系,但是与组合的区别在于,对象的生命周期不受限制。
这两个条目都可以单独生存,这意味着结束一个实体不会影响另一实体。
它们可以彼此独立存在。
因此,它通常被称为周关联。
让我们以一个球员和一个团队为例。
即使团队不再存在,作为团队一部分的球员也可以存在。
我们需要聚合的主要原因是为了保持代码的可重用性。