动态绑定机制说明:
1.当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定
2.当调用对象属性时,没有对象绑定机制,哪里声明,哪里使用
源代码:
java
public class DynamicBinding {
public static void main(String[] args) {
A a = new B();
System.out.println(a.sum());//40
System.out.println(a.sum1());//30
}
}
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;
}
}
当把B类中的sum()注销掉,再去执行System.out.println(a.sum())
此时结果为30
java
public class DynamicBinding {
public static void main(String[] args) {
A a = new B();
//当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定
//也就是说,调用的对象是哪个类型,就去找这个类型中的方法
System.out.println(a.sum());//30
//当执行到a.sum()中的return getl() + 10时,由于运行类型是B,所以会去调用B类中的
//getl()方法,此时return i;返回的是B中的i值
System.out.println(a.sum1());//当调用对象属性时,没有对象绑定机制,哪里声明,哪里使用
//属性没有对象绑定机制,输出20
}
}
class A{//父类
public int i = 10;
public int sum(){
return getl() + 10;//20+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;
// }
}