package polymorphic_.DynamicBinding;
//动态绑定机制(调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定)
//调用属性的时候,没有动态绑定机制,那里声明那里使用
public class DynamicBinding01 {
public static void main(String[] args) {
//a 的编译类型 A, 运行类型 B
A a = new B();//向上转型
System.out.println(a.sum());//?40 -> 30(a的运行类型是B,所以getI应该是子类里的getI)
System.out.println(a.sum1());//?30-> 20
}
}
class A {//父类
public int i = 10;
//动态绑定机制:
public int sum() {//父类 sum()
return getI() + 10;//20 + 10
}
public int sum1() {//父类 sum1()
return i + 10;//10 + 10
}
public int getI() {//父类 getI
return i;
}
}
class B extends A {//子类
public int i = 20;
// public int sum() {
// return i + 20;
// }
public int getI() {// 子类 getI()
return i;
}
// public int sum1() {
// return i + 10;
// }
}
方法和对象的运行类型绑定
|