作者:使劲扑腾的笨鸟
转载、引用或截图,请标明出处。
1.1 重写(override):多态的表现形式。发生于【继承】,子类重写父类方法。(又称“覆盖”“覆写”)。见Chapter 5
1.2 重载(overload):多态的表现形式。发生于【同一个类】或【继承】。见Chapter 7
返回值 | 方法名 | 参数列表 | 方法体 | |
---|---|---|---|---|
重写override | 相同 | 相同 | 相同 | 一般不同 |
重载overload | 随意 | 相同 | 不相同 | 一般不同 |
注:①为了防止在重写的过程中,不小心重载了(如改变了参数列表),可通过注解@override加以解决。见Chapter 20
②【构造方法】不能被重写,但可以被重载。
③重写的方法不能抛出新的、或比被重写方法声明得更广泛的强制性异常;重载的方法没有限制。见Chapter 12
④两者具体的特性在各自章节中讨论。
1.3 重用:(又称“复用”),写好的代码再次使用,以快速开发新软件。
1.4 重构:程序中的功能不变的情况下,进行性能优化(如依据设计模式等)。
1. 前期绑定:“一个非面向对象编程的编译器产生的函数调用会引起所谓的【前期绑定】”,“这么做意味着编译器将产生对一个具体函数名字的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址”。[P9]
2. 后期绑定:“当向对象发送信息时,被调用的代码直到运行时才能确定。编译器确保被调用的方法的存在,并对调用参数和返回值执行类型检查(无法提供此类保证的语言被称为弱类型的),但是并不知道将被执行的确切代码”。[P9]
3. 后期绑定的原理:“为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法体的地址。”“这样,根据这一小段代码的内容,每一个对象都可以具有不同的行为表现。当向一个对象发送信息时,该对象就能够知道对这条消息应该做些什么。”[P9] 见Chapter 8
4. “在Java中,动态绑定是默认行为,不需要添加额外的关键字来实现多态”。[P9]
5. 意义:比如:我有4个重载的方法,但当我调用(对象发送信息)时,最终只使用其中一种。按照前期绑定的原则,这些代码都需要被处理;而后期绑定,使得临运行前,掐指一算,便知道用的哪个方法体,省时省空间,从而实现多态的特性。
1. 单根继承:在除C++以外的所有OOP语言中,所有的类最终都继承自单一的基类。
2. 在Java中,这个终极基类的名字是Object。
3. “在单根继承结构中的所有对象都具有一个共用接口,所以它们归根到底都是相同的基本类型”。[P11]
4. 优点:①保证所有对象都具备某些功能。
②所有对象都可以很容易地在堆上创建,参数传递也得到了极大简化。
③使垃圾回收器的实现变得容易得多。
④所有对象都保证有其类型信息。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。
在阅读的过程中,结合自己先前的经验,很感慨各种语言之间的关系如此微妙!依据如下(依据很多,只举一例)。
①C++是C的一个超集,不用多说;
②“尽管Java是基于C++的,但是……”——《Java编程思想(第四版)》P21;
③“.NET平台大致相当于Java虚拟机……和Java类库,而C#毫无疑问与Java有类似之处。……他们可以看得到Java”(的优缺点)“然后基于此去构建……”——《Java编程思想(第四版)》P19;
④“Sun的设计者们已经认真仔细地去研究了C#,以及为什么程序员们可能会转而使用它, 然后通过在JavaSE5中对Java做出的重大改进而做出了回应。”——《Java编程思想(第四版)》P19。
在这之后,我对于更多语言之间的关系产生了兴趣,并在知乎中进行了提问,即:各种编程语言之间的关系如何(每种新语言,是为了解决哪种(些)语言,在哪些方面的问题,才应运而生的)?希望大佬们能够解答以及尽可能地补充,谢谢!