动态绑定机制
1.当调用对象方法的时候,该方法会和该对象的内存地址或者运行类型绑定
2.当调用对象属性时,没有动态绑定机制,那里声明,那里使用
代码
class A {
public int i = 10;
public int sum() {
return getI() + 10;
}
public int sum1() {
return i + 10;
}
/*
* 因为子类A有重写该方法,则会调用B的getI()
* */
public int getI() {
return i;
}
}
class B extends A {
public int i = 20;
// @Override
// public int sum() {
// return i + 20;
// }
@Override
public int getI() {
return i;
}
/*当注释了,运行类型为B时会调用父类的sum1方法,里面的i是用父类的i
*/
// public int sum1() {
// return i + 10;
// }
}
解析
1.当B继承A的时候,B调用父类方法会先寻找子类有没有,没有则在父类调用,反之在子类;若父类调用的方法中包含了子类重写的方法如sum()方法中的getI()方法,则会在子类调用
2.B使用属性的时候如 i ,如果是在B类中调用则 i=20,如果方法在A类中调用则 i=10;