8.2.4对象之间的关系
继承是对象之间的一种简单关系,可以让派生类完整地获得基类的特性,而派生类也可以访问基类内部的一些工作代码(通过protected成员)。对象之间还有其他一些比较重要的关系。
本节简要讨论下述关系
包含关系
一个类包含另一个类。这类似于继承关系,但包含类可以控制 对被包含类的成员的访问,甚至在使用被包含类的成员前进行其他处理
集合关系
一个类用作另一个类的多个实例的容器。这类似于对象数组,但集合有其他功能,包括索引、排序、重新设置大小等。
1.包含关系
用一个成员字段包含对象实例,就可以实现包含关系。这个成员字段可以是公共字段,此时与继承关系一样,容器对象的用户就可以访问它的方法和属性,但不能像继承关系那样,通过派生类访问类的内部代码。
另外,可以让被包含的成员对象变成私有成员。如果这么做,用户就不能直接访问其成员,即使这些成员是公共的,也不能访问。但可以使用包含类的成员访问这些私有成员。也就是说,可以完全控制被包含的类有什么成员,如果有成员,还可以在被包含类的成员前,在包含类的成员上进行其他处理。
例如://Udder乳房
Cow类包含一个Udder类,它有一个公共方法Milk。Cow对象可以按照要求调用这个方法,作为SupplyMilk()方法的一部分,但Cow对象的用户看不到这些细节。
在UML中,被包含类可以用关联线条来表示。对于简单的包含关系,可以用带有1的线条说明一对一的关系(一个Cow实例包含一个Udder实例)
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了