java 的动态绑定机制
看一个例子:
DynamicBinding.java:
package com.hspedu.poly_.dynamic_;
public class DynamicBinding {
public static void main(String[] args) {
// a 的编译类型是 A, 运行类型是 B
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;
}
}
- 当调用对象方法的时候,该方法会和该对象的内存地址 / 运行类型绑定。
- 当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用。
例子:
package com.hspedu.poly_.dynamic_;
public class DynamicBinding {
public static void main(String[] args) {
// a 的编译类型是 A, 运行类型是 B
A a = new B();//向上转型
System.out.println(a.sum());//30
System.out.println(a.sum1());//20
}
}
class A {
public int i= 10;
//动态绑定机制:
public int sum() {
return getI()+ 10;
}
public int sum1(){