当前课程知识点:Java程序设计 > 第三章 类的重用 > 3.6-类的组合 > 3.6-类的组合
大家好
欢迎回来继续学习
JAVA语言程序设计
这一节我们来学习类的组合
我们写面向对象的程序
就是要用软件来模拟
现实世界中的对象
那么现实世界中的对象呢
往往是由部件组装而成的
那我们就希望
我们程序中的对象
是不是也可以由部件组装而成呢
在JAVA中
我们是可以实现
这种部件组装的思想的
我们在设计一个新的类的时候
可以选用已有类的对象
作为它的成员
那么这就构成了一个
组合的机制
也就是JAVA里边的类的组合
类的组合它也是一种
类的重用机制
这种重用机制
表达的是包含关系
有一个这样的关系
现在我们来看一下这个组合的语法
其实组合呢
就是将已经存在的
类的对象放到新类里面就行了
举个例子比如说
我们可以说厨房kitchen
里面有个炉子cooker
和一个冰箱refrigerator
所以我们可以简单的就把对象
my cooker和my refrigerator
放在类Kitchen里边
那我们看这个类Kitchen的声明
里面就包含了一个Cooker对象成员
一个Refrigerator对象成员
那这就是一个简单的类组合了
部件组装的思想
接下来我们通过一个
更完整的例题来体验一下
类的组合
现在我们用线段类作为例子
来演示一下类的组合
由于一条线段包含两个端点
所以我们先声明好个点类
准备好
接下来声明这个线段类
它有两个端点嘛
所以我们看到有两个属性
实际上是组合
它包含一个端点P1 一个端点P2
在线段类的构造方法中呢
就调用了点类的构造方法
分别构造了两个端点
参数a的x坐标 y坐标取出来
构造一个端点
参数b的x坐标 y坐标取出来
构造另一个端点
然后还在这个线段类中
另外增加了一个
自己声明的方法Length
计算线段的长度
这就是一个典型的类组合
好 我们了解了类的组合以后呢
大家会觉得组合也是一种
类重用的机制
那前面讲的继承呢
也是一种类重用的机制
它们之间有什么异同呢
其实它们是用来表达不同的
类与类之间的关系的
继承表达的是
是一个 是一种这种从属关系
隶属关系
而组合表达的是一种包含关系
有一个这样的关系
很多时候在声明一个
比较复杂的类的时候呢
可能继承组合都用得上
那接下来我们通过一个例题
来看一下我们综合使用
继承和组合两种机制
现在我们再来看一个
既有组合又有继承的例子
一个餐桌布置的例子
布置餐桌嘛
就要有餐盘有各种餐具
还要有你餐桌设置的
一种固定的模式
对吧
首先我们在这儿声明一个盘子类
然后接下来呢
再声明一个餐盘类
DinnerPlate它扩展了盘子
餐盘也是盘子嘛
那就是说明餐盘为盘子的子类
这是一种类的继承
所以我们看一下子类中
它的DinnerPlate构造方法的第一句
是调用它超类的构造方法
然后因为有各种餐具
所以我们先声明一个
各种餐具的超类Utensil类
然后勺子继承这个器具类
它的构造方法
先调用超类的构造方法
叉子也是继承了器具类
也是在构造方法里头
先调用超类的构造方法
餐刀类也是一样的
餐桌布置呢我们认为
它首先是一种做事的习惯
所以我们先声明一个
Custom类作为超类
然后让PlaceSetting餐桌布置类
去扩展或者继承Custom类
那这就有一种继承关系了
除了继承关系以外
布置餐桌你显然要有
各种餐具餐盘放在上面
所以这还有一个组合关系在里面
那么在餐桌布置里面呢
它的组件有勺子 叉子
餐刀还有餐盘
在PlaceSetting构造方法中呢
第一件事儿
当然是调用它超类的构造方法
然后还要调用它组件对象
所属类的构造方法
去构造一个个的组件对象
把这些餐具还有餐盘构造出来
好 那最后才是这个
PlaceSetting类构造方法中的
其他语句
那比如说我们就用一个
println输出信息
来模拟一些其他的语句
表示这是PlaceSetting
构造方法的方法体的
其他语句在执行
接下来测试一下
构造一个PlaceSetting对象
看看构造方法的调用次序是什么
从运行结果我们会看到
PlaceSetting的超类构造方法
首先被调用
然后就是去构造它那些组建了
对象成员
在构造勺子之前
先调用Spoon超类构造方法
Utensil
同样的次序构造叉子
构造餐刀
都是先调用它们超类构造方法
然后才是叉子餐刀构造方法
还有构造餐盘对象
也是先调用它得超类Plate
盘子的构造方法
然后构造餐盘
最后我们看到是执行PlateSetting
这个类它构造方法
方法体中的其他语句
就是最后一个输出信息的语句
通过这个例子我们就看到了
既有组合又有继承的情况下
构造方法的调用次序是什么
好 在这一章呢
我们学习了类的组合
而且我们跟类的继承进行了比较
了解了两种不同的类重用机制
分别是描述类与类之间
不同关系的
通过例题我们知道
可以综合来使用组合和继承
构成一个比较复杂的类
这一节的内容就是这些
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件