Java:静态绑定(bind)与动态绑定(bind)(再次)

标签 java dynamic-binding static-binding

我已经阅读了很多博客、教程和合作伙伴,但我对 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/

相关文章:

java8 + foreach循环的内部工作

java - 如何在不在服务器端存储文件的情况下向浏览器提供 PDF?

java - 如何实现序列化?

void ref 方法中的 java 引用变量

c++ - 使用虚函数的力量

c++ - 非重写虚函数的绑定(bind)类型

java - case : static binding? 动态绑定(bind)?

java - 子类型多态性 : Always late binding?