Java的动态绑定机制(重要)
动态绑定机制说明:
1.当调用对象方法时,该方法会和该对象的内存地址(运行类型)绑定
2.当调用对象属性时,没有对象绑定机制,哪里声明,哪里使用
源代码:
public class DynamicBinding {public static void main(String[] args) {A a = new B();System.out.println(a.sum());//40System.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
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;
// }
}