总结:
1、当调用对象的方法时,会跟对象的内存地址绑定,根据运行类型开始查找
2、当调用对象的属性时,会没有动态绑定机制,哪里声明,哪里使用
package dynamicBinding;
/* java 的动态绑定机制(重要) - 总结: 方法看右,属性看左
1、当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
2、当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
*/
public class DynamicBinding {
public static void main(String[] args) {
B b = new B();
System.out.println(b.sum()); // 方法看左,调用A().sum() 时遇到GetI(),会调用B类中的GetI()方法
System.out.println(b.sum1()); // 属性看右,调用A().sum1()时遇到i,会调用A类中的i属性
}
}
class A{
private int i=10;
public int sum(){
return GetI() + 20;
}
public int sum1(){
return i + 10;
}
public int GetI(){
return i;
}
}
class B extends A{
private int i=20;
// public int sum(){
// return GetI() + 20;
// }
//
// public int sum1(){
// return i + 10;
// }
public int GetI(){
return i;
}
}