第5节 类的组合
7.5 类的组合
类的组合
面向对象编程的一个重要思想就是用软件对象来模仿现实世界的对象
现实世界中,大多数对象由更小的对象组成
与现实世界的对象一样,软件中的对象也常常是由更小的对象组成
Java的类中可以有其他类的对象作为成员,这便是类的组合
7.5.1 组合的语法
组合的语法简单,只要把已存在类的对象放到新类中即可可以使用“has a”语句来描述这种关系
例如,考虑Kitchen类提供烹饪和冷藏食品的功能,很自然的说“my kitchen 'has a' cooker/refrigerator”。所以,可简单的把对象myCooker和myRefrigerator放在类Kitchen中。格式如下
class Cooker{ // 类的语句 }
class Refrigerator{ // 类的语句}
class Kitchen{Cooker myCooker; Refrigerator myRefrigerator;}
组合:一条直线是由两个点组成的


7.5.2 组合与继承的比较
“包含”关系用合成来表
如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择组合,我们需在新类里嵌入现有类的private对象;
如果想让类用户直接访问新类的组合成分,需要将成员对象的属性变为public;
“属于”关系用继承来表达
取得一个现成的类,并制作它的一个特殊版本。通常,这意味着我们准备使用一个常规用途的类,并根据特定需求对其进行定制
7.5.2 组合与继承的比较——Car的例子
car(汽车)对象是一个很好的例子,由于汽车的装配是故障分析时需要考虑的一项因素,所以有助于客户程序员理解如何使用类,而且类创建者的编程复杂程度也会大幅度降低
class Engine
{ //发动机类
public void start() {}
public void rev() {}public void stop() {}}

组合与继承的结合
许多时候都要求将合成与继承两种技术结合起来使用,创建一个更复杂的类
7.5.3 组合与 继承的结合(续)——例7_13



运行结果
类的组合
面向对象编程的一个重要思想就是用软件对象来模仿现实世界的对象
现实世界中,大多数对象由更小的对象组成
与现实世界的对象一样,软件中的对象也常常是由更小的对象组成
Java的类中可以有其他类的对象作为成员,这便是类的组合
7.5.1 组合的语法
组合的语法简单,只要把已存在类的对象放到新类中即可可以使用“has a”语句来描述这种关系
例如,考虑Kitchen类提供烹饪和冷藏食品的功能,很自然的说“my kitchen 'has a' cooker/refrigerator”。所以,可简单的把对象myCooker和myRefrigerator放在类Kitchen中。格式如下
class Cooker{ // 类的语句 }
class Refrigerator{ // 类的语句}
class Kitchen{Cooker myCooker; Refrigerator myRefrigerator;}
组合:一条直线是由两个点组成的


7.5.2 组合与继承的比较
“包含”关系用合成来表
如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择组合,我们需在新类里嵌入现有类的private对象;
如果想让类用户直接访问新类的组合成分,需要将成员对象的属性变为public;
“属于”关系用继承来表达
取得一个现成的类,并制作它的一个特殊版本。通常,这意味着我们准备使用一个常规用途的类,并根据特定需求对其进行定制
7.5.2 组合与继承的比较——Car的例子
car(汽车)对象是一个很好的例子,由于汽车的装配是故障分析时需要考虑的一项因素,所以有助于客户程序员理解如何使用类,而且类创建者的编程复杂程度也会大幅度降低
class Engine
{ //发动机类
public void start() {}
public void rev() {}public void stop() {}}

组合与继承的结合
许多时候都要求将合成与继承两种技术结合起来使用,创建一个更复杂的类
7.5.3 组合与 继承的结合(续)——例7_13



运行结果



