我读的是Java编程思想第四版英文版(Thinking in Java, 4th Edition)。
这本书果然是讲解Java基础以及OOP思想的神作!对于很多Java的基础内容讲得都很到位,没有那种一掠而过的感觉。在读的过程中,有很多启发性的瞬间,常常会给人一种恍然大悟的感觉——噢,原来这个概念是应该这样理解的,同时也能了解到是怎样将这些概念应用到实际开发中的。当然其中也有很多部分是在初读的时候无法深刻理解的,于是就有了反复思考、咀嚼的过程。
结果今天突然想到,如果能把这些感悟和思考统统记录下来,不仅自己可以在今后反过头来参考,而且还可以与广大的开发者分享我的思想,得到高人的指正,一举两得。这样就有了这系列的Java编程思想第四版的读书笔记。
由于我现在正读到了多态(Polymorphism)一章,因此我的读书笔记就将从多态写起。之前的章节和内容我打算以后在进行补充。
Java编程思想第四版读书笔记(一)(就暂定为第一篇吧!)
多态(Polymorphism)
1.最基础但是最难说清楚的问题——什么是多态?
----
简单地说,多态就是“多种形态”。在面向对象编程语言中,这就意味着从父类继承了相同的公共接口,但在使用这些接口的时候,会呈现出不同的形式与形态——实际调用的是经过动态绑定之后的已被覆写而变得有所不同的方法。
要理解这其中的含义,我觉得最好还是从对象在内存中的分布来看。
在使用了向上转型(upcast)之后,指向一个对象的引用,其类型是该对象的基类类型,但实际上内存中的对象仍然为继承子类的实例,因此在调用相应的方法的时候,会调用该实例中的具体方法,而不是基类中的抽象方法。
不同的子类对象会调用不同子类对象中的对应方法,于是就呈现出来“多态”的情况。
事实上,多态是离不开继承和数据抽象的,可以从下面一项看出。
2.多态3条件
----
3.向上转型(Upcasting)
----
对象既可以作为它自己本身的类型使用,也可以作为基类型使用。把某个对象的引用视为对其基类型的引用的做法就叫做向上转型。
4.一定要多加留意“覆写私有方法”这种不易察觉的错误
----
父类的私有方法,默认也是被final修饰的,并且对子类来说也是不可见的,因此根本不能被继承,当然也就不能被覆写(override)了。
如果不小心错误地在子类中“覆写”了一个父类的私有方法,一定要注意,
这其实是一个全新的方法,而非继承而来。
这种错误编译器是检查不出来的,因此需要程序员多加留意。