`
willyiwei
  • 浏览: 9561 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java编程思想(第四版)读书笔记之多态(Polymorphism)

阅读更多
我读的是Java编程思想第四版英文版(Thinking in Java, 4th Edition)。

这本书果然是讲解Java基础以及OOP思想的神作!对于很多Java的基础内容讲得都很到位,没有那种一掠而过的感觉。在读的过程中,有很多启发性的瞬间,常常会给人一种恍然大悟的感觉——噢,原来这个概念是应该这样理解的,同时也能了解到是怎样将这些概念应用到实际开发中的。当然其中也有很多部分是在初读的时候无法深刻理解的,于是就有了反复思考、咀嚼的过程。

结果今天突然想到,如果能把这些感悟和思考统统记录下来,不仅自己可以在今后反过头来参考,而且还可以与广大的开发者分享我的思想,得到高人的指正,一举两得。这样就有了这系列的Java编程思想第四版的读书笔记。

由于我现在正读到了多态(Polymorphism)一章,因此我的读书笔记就将从多态写起。之前的章节和内容我打算以后在进行补充。

Java编程思想第四版读书笔记(一)(就暂定为第一篇吧!)
多态(Polymorphism)

1.最基础但是最难说清楚的问题——什么是多态?
----
简单地说,多态就是“多种形态”。在面向对象编程语言中,这就意味着从父类继承了相同的公共接口,但在使用这些接口的时候,会呈现出不同的形式与形态——实际调用的是经过动态绑定之后的已被覆写而变得有所不同的方法。

要理解这其中的含义,我觉得最好还是从对象在内存中的分布来看。

在使用了向上转型(upcast)之后,指向一个对象的引用,其类型是该对象的基类类型,但实际上内存中的对象仍然为继承子类的实例,因此在调用相应的方法的时候,会调用该实例中的具体方法,而不是基类中的抽象方法。

不同的子类对象会调用不同子类对象中的对应方法,于是就呈现出来“多态”的情况。

事实上,多态是离不开继承和数据抽象的,可以从下面一项看出。

2.多态3条件
----
  • 继承;
  • 覆写;
  • 父类引用指向子类对象。

3.向上转型(Upcasting)
----
对象既可以作为它自己本身的类型使用,也可以作为基类型使用。把某个对象的引用视为对其基类型的引用的做法就叫做向上转型。

4.一定要多加留意“覆写私有方法”这种不易察觉的错误
----
父类的私有方法,默认也是被final修饰的,并且对子类来说也是不可见的,因此根本不能被继承,当然也就不能被覆写(override)了。
如果不小心错误地在子类中“覆写”了一个父类的私有方法,一定要注意,这其实是一个全新的方法,而非继承而来。
这种错误编译器是检查不出来的,因此需要程序员多加留意。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics