1. 对象导论
1.1 基本概念
对象的定义
-
万物皆为对象;
-
程序时对象的集合,它们通过发送消息来告知彼此所要做的;
-
每个对象都有自己的由其他对象所构成的存储;
-
每个对象都有其类型;
-
某一特定类型的所有对象都可以接收同样的消息。
-
每个对象都提供服务
接口
接口确定了对某一特定对象所能发出的请求。(eg. 灯的开关请求)
被隐藏的具体实现/访问控制
- public:元素对任何人可用
- private:除类型创建者和类型内部方法之外任何人不得访问的元素
- protect:基于private,但继承的类型可以访问元素
- 包访问权限:同一个包内的类型可以访问
1.2 复用
组合/聚合
最简单的服用就是直接使用类的对象,或者将类的对象置于新类之中,通常置于新类中的对象都是private的。
- 组合:使用现有的类合成新的类
- 聚合:如果组合是动态发生的称为聚合
- 组合经常被视为 has-a 关系(eg. 汽车<--引擎)。
- 优先考虑组合而不是继承,因为更加简单灵活。
继承
基于已有的类,复制并添加修改副本后得到新类,而不是重复创建相似的类。继承描述了类型之间的相似性。
- 单根继承结构:万物起源 Object基类
- 源类/基类/超类/父类 ==> 导出类/子类/继承类
- 继承类不仅包括现类型的所有成员,还复制了基类的接口,所有发送给基类的消息都可以发送给子类
- 差异性
- 直接添加新的方法 (is-like-a)
- Overriding(覆盖),改变现有基类的方法的行为 (is-a)
多态
- 泛型
- 后期绑定
- 向上转型:将子类堪称它的基类的过程,安全
容器
- 问题:无法确定解决某特定问题需要多少对象,对象存活多久等问题
- eg. list map set
- 容器的选择:
- 不同的容器提供了不同的接口和行为
- 不同的容器对不同的操作有着不同的效率
- ArrayList 随机访问是固定开销
- LinkedList 插入删除开销低于ArrayList
参数化类型
- 向下转型:不安全的,需要知道确切的类型信息
ArrayList<Shape> shapes = new ArrayList<Shape>();
1.3 对象的创建和生命周期
1.4 异常处理机制
1.5 并发编程
- 共享资源问题,上锁机制