1.上溯造型
1.1 什么是上溯造型
以代码为例:
1 | class Instrument{ |
上溯造型:将子类句柄转化为父类类型
此时类的衍生关系可表示为:
1.2 为什么要使用上溯造型
1.2.1 不使用上溯造型
1 | class Note2 { |
经过观察,我们可以发现:不使用上溯造型时,我们需要为不同的子类定制接口,并重载父类方法,但他们的功能却大致相同,这使得我们的工作量巨大
1.2.2 使用上溯造型
1 | class Note{ |
使用上溯造型,可以不管子类,而直接和父类交互,从而避免了大量重复代码,简少工作量,提高了代码的重用。
1.3怎么上溯造型
正如定义所诉,不再赘述。
这里不禁有个疑问,父类是如何知道我们传入的是哪种子类对象,从而有不同的响应呢?接下来就引入动态绑定的概念:
(这里只是根据书中的解释粗浅的理解,挖个坑,以后再来填~~)
2.动态绑定
绑定:将方法调用与方法主体连接在一起
- 早期绑定:在程序运行以前执行绑定(C语言)
- 后期绑定(也叫运行期绑定、动态绑定):提供某种机制,在运行期间判断对象的类型,调用适当的方法
2.1 什么是动态绑定
提供某种机制,在运行期间判断对象的类型,调用适当的方法
2.2 为什么使用动态绑定
我想这里应该很清晰了,上溯造型只是为我们提供了一种简单而巧妙地方法,通过子类对象上溯父类类型,然而这并不是一个完整的过程,找到正确的父类类型后,还应该产生正确的相应,而动态绑定正是在此时发挥了作用
2.3 怎么使用动态绑定
动态绑定是由虚拟机代替我们实现的,在上溯造型并获得正确的响应后,动态绑定就体现在这一过程中,所以我们只需要理解其原理,弄清楚虚拟机是如何做到调用正确的方法即可。
(这个坑以后来填)