Chapter 1 对象导论

Chapter 1 对象导论

作者:使劲扑腾的笨鸟

转载、引用或截图,请标明出处。

1.【重X】概念区分:重写、重载、重用、重构。

1.1 重写override):多态的表现形式。发生于【继承】,子类重写父类方法。(又称“覆盖”“覆写”)。见Chapter 5

1.2 重载overload):多态的表现形式。发生于【同一个类】或【继承】。见Chapter 7

  返回值 方法名 参数列表 方法体
重写override 相同 相同 相同 一般不同
重载overload 随意 相同 不相同 一般不同

注:①为了防止在重写的过程中,不小心重载了(如改变了参数列表),可通过注解@override加以解决。见Chapter 20

       ②【构造方法】不能被重写,但可以被重载。

       ③重写的方法不能抛出新的、或比被重写方法声明得更广泛的强制性异常;重载的方法没有限制。见Chapter 12

       ④两者具体的特性在各自章节中讨论。

1.3 重用:(又称“复用”),写好的代码再次使用,以快速开发新软件。

1.4 重构:程序中的功能不变的情况下,进行性能优化(如依据设计模式等)。

 

2. 后期绑定

1. 前期绑定:“一个非面向对象编程的编译器产生的函数调用会引起所谓的【前期绑定】”,“这么做意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址”。[P9]

2. 后期绑定:“当向对象发送信息时,被调用的代码直到运行时才能确定编译器确保被调用的方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为弱类型的),但是并不知道将被执行的确切代码”。[P9]

3. 后期绑定的原理:“为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。”“这样,根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。当向一个对象发送信息时,该对象就能够知道对这条消息应该做些什么。”[P9] 见Chapter 8

4. “在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态”。[P9]

5. 意义:比如:我有4个重载的方法,但当我调用(对象发送信息)时,最终只使用其中一种。按照前期绑定的原则,这些代码都需要被处理;而后期绑定,使得临运行前,掐指一算,便知道用的哪个方法体,省时省空间,从而实现多态的特性。

 

3. 单根继承结构

1. 单根继承:在除C++以外的所有OOP语言中,所有的类最终都继承自单一的基类。

2. 在Java中,这个终极基类的名字是Object

3. “在单根继承结构中的所有对象都具有一个共用接口,所以它们归根到底都是相同的基本类型”。[P11]

4. 优点:①保证所有对象都具备某些功能

               ②所有对象都可以很容易地在堆上创建参数传递也得到了极大简化。

               ③使垃圾回收器的实现变得容易得多。

               ④所有对象都保证有其类型信息。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。

 

4. 提及的几种语言的关系

Chapter 1 对象导论_第1张图片

在阅读的过程中,结合自己先前的经验,很感慨各种语言之间的关系如此微妙!依据如下(依据很多,只举一例)。

①C++是C的一个超集,不用多说;

②“尽管Java是基于C++的,但是……”——《Java编程思想(第四版)》P21;

③“.NET平台大致相当于Java虚拟机……和Java类库,而C#毫无疑问与Java有类似之处。……他们可以看得到Java”(的优缺点)“然后基于此去构建……”——《Java编程思想(第四版)》P19;

④“Sun的设计者们已经认真仔细地去研究了C#,以及为什么程序员们可能会转而使用它, 然后通过在JavaSE5中对Java做出的重大改进而做出了回应。”——《Java编程思想(第四版)》P19。

在这之后,我对于更多语言之间的关系产生了兴趣,并在知乎中进行了提问,即:各种编程语言之间的关系如何(每种新语言,是为了解决哪种(些)语言,在哪些方面的问题,才应运而生的)?希望大佬们能够解答以及尽可能地补充,谢谢!

你可能感兴趣的:(Thinking,in,Java(Java编程思想,第四版))