无论合成还是继承,都允许我们将子对象置于自己的新类中。大家或许会奇怪两者间的差异,以及到底该如何选择。 如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择合成。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。

有些时候,我们想让类用户直接访问新类的合成。也就是说,需要将成员对象的属性变为public。成员对象会将自身隐藏起来,所以这是一种安全的做法。而且在用户知道我们准备合成一系列组件时,接口就更容易理解。car(汽车)对象便是一个很好的例子:

//: Car.java
// Composition with public objectsclass Engine {public void start() {}public void rev() {}public void stop() {}
}class Wheel {public void inflate(int psi) {}
}class Window {public void rollup() {}public void rolldown() {}
}class Door {public Window window = new Window();public void open() {}public void close() {}
}public class Car {public Engine engine = new Engine();public Wheel[] wheel = new Wheel[4];public Door left = new Door(),right = new Door(); // 2-doorCar() {for(int i = 0; i < 4; i++)wheel[i] = new Wheel();}public static void main(String[] args) {Car car = new Car();car.left.window.rollup();car.wheel[0].inflate(72);}
} ///:~

由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分),所以有助于客户程序员理解如何使用类,而且类创建者的编程复杂程度也会大幅度降低。

如选择继承,就需要取得一个现成的类,并制作它的一个特殊版本。通常,这意味着我们准备使用一个常规用途的类,并根据特定的需求对其进行定制。只需稍加想象,就知道自己不能用一个车辆对象来合成一辆汽车——汽车并不“包含”车辆;相反,它“属于”车辆的一种类别。“属于”关系是用继承来表达的,而“包含”关系是用合成来表达的。

Java编程思想——到底选择合成还是继承相关推荐

  1. Java编程思想第四版学习总结

    Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...

  2. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B {p ...

  3. 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 多少语言就是死在了取代Java的路上 Java:我活着的意义就是天天被取代 Java:我也不 ...

  4. Java编程思想日志

    Thinking In Java的作者是大牛!做事要站在巨人的肩膀上有助于提高效率和开阔眼界!建议学习java的小伙伴儿有时间可以抽空了解一下,以下内容为读书笔记,比较杂乱,仅供参考,推荐阅读原著: ...

  5. 【Java编程思想】读书笔记(二)第六章---第十章

    Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...

  6. 12.JAVA编程思想——集合的类型

    12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...

  7. 12 JAVA编程思想——集合的类型

    12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...

  8. Java编程思想翻译勘误

    总的来说,Java编程思想是一本好书:但是因为译者可能不懂计算机,很多地方都有严重错误. 之前和朋友抱怨过,朋友提议抱怨无用不如干点实事.遂决定边看边将自己找到的翻译错误贴出来,希望能给别人一些帮助. ...

  9. 【Java编程思想】

    Java编程思想(一) https://blog.csdn.net/weixin_40841731/article/details/83861285 MikeShine 2019.04.22 20:1 ...

最新文章

  1. POJ-2746:约瑟夫问题(Java版)
  2. Django框架简介
  3. java entry迭代,如何迭代Entry / BarEntry ArrayList并修改它们的值MPAndroid Chart
  4. 标准时间校对_颜色校对很难?瑞锌五金工具对色灯箱强势来袭
  5. java生成验证码图片
  6. Unity Android 打开相册和摄像头
  7. HTML导航栏的四种制作方法
  8. iphone 6s 越狱
  9. 如何使打印出手写字体
  10. 软考-信息系统项目管理师-项目进度管理
  11. Shell 进阶指南
  12. 微信缓存深度清理,一招清理20G隐藏的缓存垃圾
  13. mysql 5.1 limit_mysql5 limit使用表达式的问题
  14. 巴比特 | 元宇宙每日荐读:三位手握“价值千万”藏品的玩家,揭秘数字藏品市场“三大套路”...
  15. 横向项目和纵向项目的区别
  16. Excel2013 基本用法(上)
  17. ext2 / ext3 结构分析
  18. 《C语言进阶》小乐乐与字符串问题求解
  19. ElasticSearch语法整理-DSL语言高级查询
  20. Centos 系统优化

热门文章

  1. 【Python基础】零基础学习Python列表操作
  2. 人脸口罩检测现开源PyTorch、TensorFlow、MXNet等全部五大主流深度学习框架模型和代码...
  3. Android Selector的简写
  4. VCG(VisualCodeGrepper)安装使用教程
  5. 日志服务(Log service)4月控制台更新指南
  6. JDK1.8源码(二)——java.lang.Integer 类
  7. 沫沫金:2014最新全浏览器兼容左列固定右列自适应宽度技巧大公开
  8. golang(5):编写WebSocket服务,client和html5调用
  9. Linux环境下C语言模拟内存负载测试
  10. pomelo 分布式聊天入门客户端demo(c#)