Java编程思想——到底选择合成还是继承
无论合成还是继承,都允许我们将子对象置于自己的新类中。大家或许会奇怪两者间的差异,以及到底该如何选择。 如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择合成。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的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编程思想——到底选择合成还是继承相关推荐
- Java编程思想第四版学习总结
Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...
- 重新精读《Java 编程思想》系列之组合与继承
Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B {p ...
- 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 多少语言就是死在了取代Java的路上 Java:我活着的意义就是天天被取代 Java:我也不 ...
- Java编程思想日志
Thinking In Java的作者是大牛!做事要站在巨人的肩膀上有助于提高效率和开阔眼界!建议学习java的小伙伴儿有时间可以抽空了解一下,以下内容为读书笔记,比较杂乱,仅供参考,推荐阅读原著: ...
- 【Java编程思想】读书笔记(二)第六章---第十章
Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...
- 12.JAVA编程思想——集合的类型
12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...
- 12 JAVA编程思想——集合的类型
12.JAVA编程思想--集合的类型 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100510 标准Java 1.0 和1 ...
- Java编程思想翻译勘误
总的来说,Java编程思想是一本好书:但是因为译者可能不懂计算机,很多地方都有严重错误. 之前和朋友抱怨过,朋友提议抱怨无用不如干点实事.遂决定边看边将自己找到的翻译错误贴出来,希望能给别人一些帮助. ...
- 【Java编程思想】
Java编程思想(一) https://blog.csdn.net/weixin_40841731/article/details/83861285 MikeShine 2019.04.22 20:1 ...
最新文章
- POJ-2746:约瑟夫问题(Java版)
- Django框架简介
- java entry迭代,如何迭代Entry / BarEntry ArrayList并修改它们的值MPAndroid Chart
- 标准时间校对_颜色校对很难?瑞锌五金工具对色灯箱强势来袭
- java生成验证码图片
- Unity Android 打开相册和摄像头
- HTML导航栏的四种制作方法
- iphone 6s 越狱
- 如何使打印出手写字体
- 软考-信息系统项目管理师-项目进度管理
- Shell 进阶指南
- 微信缓存深度清理,一招清理20G隐藏的缓存垃圾
- mysql 5.1 limit_mysql5 limit使用表达式的问题
- 巴比特 | 元宇宙每日荐读:三位手握“价值千万”藏品的玩家,揭秘数字藏品市场“三大套路”...
- 横向项目和纵向项目的区别
- Excel2013 基本用法(上)
- ext2 / ext3 结构分析
- 《C语言进阶》小乐乐与字符串问题求解
- ElasticSearch语法整理-DSL语言高级查询
- Centos 系统优化
热门文章
- 【Python基础】零基础学习Python列表操作
- 人脸口罩检测现开源PyTorch、TensorFlow、MXNet等全部五大主流深度学习框架模型和代码...
- Android Selector的简写
- VCG(VisualCodeGrepper)安装使用教程
- 日志服务(Log service)4月控制台更新指南
- JDK1.8源码(二)——java.lang.Integer 类
- 沫沫金:2014最新全浏览器兼容左列固定右列自适应宽度技巧大公开
- golang(5):编写WebSocket服务,client和html5调用
- Linux环境下C语言模拟内存负载测试
- pomelo 分布式聊天入门客户端demo(c#)