我已经阅读了很多博客、教程和合作伙伴,但我对 Java 中的动态绑定(bind)一无所知。当我创建名为“myspecialcar”的对象时,它会从类“car”创建一个对象作为类车辆的类型作为动态绑定(bind),对吗? 所以 java 知道当我执行 myspecialcar.getType() 方法时,我有一个汽车对象,它会执行汽车类中的方法。但为什么我从类车上得到了 type?那是因为类 vehicle (type) 中的变量是静态绑定(bind)吗?
问候,
代码:
public class vehicle {
String type = "vehicle";
public String getType(){
return type;
}
}
public class car extends vehicle {
String type = "car";
public String getType(){
return type;
}
}
public class test {
public static void main (String[] args){
vehicle myvehicle = new vehicle(); // static binding
car mycar = new car(); // static binding
vehicle myspecialcar = new car(); //dynamic binding
System.out.println(myspecialcar.getType());
System.out.println(myspecialcar.type);
System.out.println(myspecialcar.getClass());
}
}
输出:
car
vehicle
class car
最佳答案
实例方法规则
当使用引用在对象上调用实例方法时,它是引用表示的当前对象的类,而不是引用的类型,确定将执行哪个方法实现。
实例属性/字段规则
当使用引用访问对象的字段时,它是引用的类型,而不是引用表示的当前对象的类,即确定将实际访问哪个字段。
关于Java:静态绑定(bind)与动态绑定(bind)(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45589463/