动态绑定机制:
1.当调用对象方法的时候,该方法会和运行类型绑定
2.当调用对象属性时,则没有该机制
public static void main(String [] args) {
A a = new B();
System.out.println(a.sum());//40———>10+20
System.out.println(a.sum1());//30------>10+10
}
}
class A{//父类
public int i =10;
public int sum() {
return getI()+10;
}
public int sum1() {
return i+10;
}
public int getI() {
return i;
}
}
class B extends A{//子类
public int i =20;
public int sum() {
return getI()+20;
}
public int sum1() {
return i+10;
}
public int getI() {
return i;
}
运用动态绑定机制:
当去掉B sum()方法时,向上找父类的sum(),找到并运行:getI()方法符合动态绑定机制-->看运行类型为B---->则运行B中的getI方法,获取20;20+10=30
当去掉B sum1()方法时,向上找父类的sum1(),找到并运行;当调用属性i时,不符合动态绑定机制,则调到父类属性i=10;return 10+10 =20