静态和动态调度之间的区别

时间:2019-06-20 13:53:21

标签: java

假设我有这个简单的类似Java的程序:

class B {
    int x;
    B() {
        x = 42;
    }
    void f() {
        print(x);
    }
};
class D extends B {
    int x;
    D() {
        x = 17;
    }
    void f() {
        print(x);
    }
}
void main() {
    B b = new B();
    b.f();
    B c = new D();
    c.f();
    D d = new D();
    d.f();
}

我想做的是在使用动态和静态分配时看到它的结果。我的理解是:在静态分配中,这3个对象的类型是在编译时确定的,因此它们是{{1 }}。因此,结果必须为1)type B 2)type B 3) type D。在动态分派中,这些对象的类型取决于运行时,并且由于42 42 17是在运行时执行的(?),因此3个对象的类型为{{1 }},结果为new B(),new(D),new(D)

这是正确的吗?如果不是,这两种调度的正确结果是什么?如何确定?

0 个答案:

没有答案