面向对象语言的基本特性
- 万物皆为对象
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的
- 每个对象都有自己的由其他对象所构成的存储
- 每个对象都拥有其类型
- 某一特定类型的所有对象都可以接收同样的消息
接口
确定对某一对象能发出的请求
访问控制
- 让客户端程序员无法接触他们不该触及的部分
- 允许库设计者可以改变类内部的工作方式而不用担心会影响客户端程序员
- public:紧随其后的元素对任何人都是可用的
- private:除类型创建者和类型内部方法之外任何人都不能访问(试图访问产生编译错误)
- protected:继承的类可以访问,但不能访问private
- default:包访问权限,类可以访问同一个包内其他类的成员
组合
使用现有类合成新的类
继承
- 一个基类包含所有到处类型所共享的特性和行为。
- 覆盖
多态
- 前期绑定
- 编译器产生对一个具体函数名字的调用,而运行时将这个调用解析到被执行代码的绝对地址
- 后期绑定
- 当向对象发送消息时,被调用的代码直到运行的时候才能确定
- 编译器确保被调用方法的存在,并对调用参数和返回值进行类型检查,但并不知道被调用的具体代码
- 为了执行后期绑定,java用一小段特殊的代码来替代绝对地址调用,这段代码使用对象中存储的信息来计算方法体的地址。
- java默认采用后期绑定
- 当向一个对象发送消息时,即使涉及向上转型,该对象也知道要执行什么样的正确行为。
单根继承
- 保证所有对象都具备某些功能,因此所有对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化。
- 由于所有对象都保证具有其类型信息,因此不会因无法确定对象的类型陷入僵局
向下转型
除非确切知道要处理的对象的类型,否则向下转型是不安全的
泛型(Java SE5引入)
用于存储保存的对象的类型