持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
动态绑定机制:
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定;
- 当调用对象属性时,不存在绑定机制,调用的哪里的就用哪里的。
代码演示:
此图为主类,里面有对象,且调用了其中的方法。 我们先分析调用a对象的sub()方法,前一章有讲解到调用方法要看运行类型,调用属性看编译类型,此处对象a的运行类型为B类,所以调用方法时先看B类里是否有sub()方法,如果没有,则会依次往上查找(注意:若出现次一级的该方法为private的,而它上一级有public修饰的此方法,那程序也会在private修饰的方法那里报错,而不会继续往上查找。进入我们的sub()方法里,观察到它return语句里又有一个方法,且子类和父类中都含有该种方法,这时就要用到我们的绑定机制里的第一句话了————方法与该对象的运行类型绑定,对象的运行类型为B类,所以此处的get()方法要从子类去调用,
紧接着return语句后面还有一个-i的操作,此处为第二句话的应用————调用对象属性时,在调用哪里就用到哪里,我个人认为还有一种理解,在写方法的时候,里面涉及的属性就是类里面的属性,那么你执行当前方法是在哪个类里面,你就应该去使用这个类中的属性,简单来说就是变量它本身就存在一个适用范围。
A类(父类)
B类(子类)