动态绑定机制
判断下面题目输出的值
class A {//父类
public int i= 10;
public int sum() {
return getl() + 10;
}
public int sum1(){
return i+ 10;
}
public int getl() {
return i;
}
}
class B extends A {//子类
public int i= 20;
public int sum() {
return i + 20;
}
public int getl() {return i;
}
public int sum1(){
return i + 10;
}
}
//main方法中
//编译类型A 运行类型B
A a = new B();//向上转型
System.out.printIn(a.sum());//40
System.out.printIn(a.sum1();//30
如果把子类中的sum注释掉,那么就会使用父类中的sum方法;return getl()时,父类 子类都有此方法,此时就涉及到了动态绑定机制;
java的动态绑定机制
- 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
- 当调用对象属性时,没有动态绑定机制,哪里声明,那里使用。
因为运行类型是B,所以调用子类中的getl()方法.
此时答案是30
System.out.printIn(a.sum());//30