抽象过程
Alan Kay 曾经总结了第一个成功的面向对象语言,同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式:
1.万物皆对象。
2.程序是对象的集合,它们通过发送消息来告知彼此所要做的。
3.每个对象都有自己的由其他对象所构成的存储。
4.每个对象都拥有类型.
5.某一特定类型的所有对象都可以接受同样的消息。
被隐藏的具体实现
Java用三个关键字在累的内部设定边界: public, private, protected.
public: 紧随其后的元素对任何人都是可以用的。
private: 除类型创建者和类型的内部方法之外的任何人都不能访问的元素。 如果试图访问,就会在编译时报错。
protected: 于private相当,差别在于继承的类可以访问protected成员,但是不能访问private成员。
Java的默认访问权限,当没有使用任何access specifier时,权限为包访问权限,即同一个包的成员可以访问,不同包的成员如同指定了private一样。
复用具体实现
由于继承在面向对象程序设计中如此重要,所以被高度强调,程序员就会有这样的印象:处处都应该使用继承。 实际上,在建立新类的时候,应该首先考虑组合,因为他更加简单灵活。如果采用这种方式,设计会变得更加清晰。一旦有了经验之后,便能够看出必须使用继承的场合了。
继承
导出类与基类具有相同的类型。
有两种方法可以使积累与导出类产生差异:
1. 直接在导出类中添加新方法,这些方法并不是基类的一部分。(is-like-a super class)
2. 改变现有基类的方法的行为,即覆盖(overriding) (is-a super class)
伴随多态的可互换对象
在OOP中,程序直到运行时才能够确定代码的地址,所以当消息发送到一个泛化对象时,必须采用其他的机制。
“后期绑定”:当向对象发送消息时,被调用的代码知道运行时才能确定。编译器确保被调用方法的存在并检查,但并不知道被执行的确切代码。
为了执行后期绑定,Java使用一小段特殊的代码代替绝对地址的调用,动态绑定在Java中是默认行为(不同于c++需要添加virtual关键字)
转型
把导出类看做他的基类的过程称为向上转型(upcasting)这个是安全的
把基类看做导出类的过程称为向下转型, 除非确切的知道所要处理的对象的类型,否则向下转型几乎是不安全的。
单根继承结构
在Java中(事实上包括除C++意外的所有OOP语言),所有的类都继承Object类。
对象的创建和生命期
Java在堆(HEAP)的内存池中动态的创建对象。在这种方式中,知道运行时才知道需要多少对象,他们的生命期如何,以及他们的具体类型是什么。Java完全采用了动态内存分类方式(基本类型只是一种特例),每当想创建一个对象时,就要使用new关键字来构建对象的实例。
Java的垃圾回收器被设计用来处理内存释放问题。垃圾回收器知道对象什么时候不被再使用,并自动释放对象占的内存,这一点同 “所有对象都继承单根基类Object” 以及 “只能在堆上创建对象” 2个特性结合起来,是的Java比C++编程要简单的多。
异常处理
异常是一种对象,它从出错地点被“抛出”,并被专门设计用来处理特定类型错误的异常处理器“捕获”。异常提供了一种从错误状态进行可靠恢复的途径。现在不再是只能退出程序,你可以进行校正,并且恢复程序运行。
Java一开始就内置了异常处理,而且强制你使用它。