Разница между статической и динамической отправкой - PullRequest
1 голос
/ 20 июня 2019

Допустим, у меня есть эта простая 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)type B 2)type B 3) type D. Поэтому результат должен быть 42 42 17. При динамической диспетчеризации тип этих объектов определяется во время выполнения, и поскольку new B(),new(D),new(D)выполняются во время выполнения (?), 3 объекта имеют тип 1)type B 2)type D 3)type D, а результат равен 42 17 17.

Это правильно? Если нет, каковы правильные результаты для этих двух типов диспетчеризации и как они определяются

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...