Java(或C ++)如何处理接口中定义的方法的调用

时间:2018-07-08 05:33:30

标签: java c++ vtable

我目前正在使用我的编程语言,它将仅具有接口并且没有对象继承。还有一个问题,因为我不知道如何制作vtable,因此可以在继承了许多接口的类中调用适当的方法。

在Java中,您可以这样编写

interface A {
    void a();
}

interface B {
    void b();
}

interface C {
    void c();
}

class Something1 implements A, B{
    ... implementing a() and b() ...
}

class Something2 implements B, C{
    ... implementing b() and c() ...
}

...

B obj = new Something1();
obj.b();

obj = new Something2();
obj.b();

并且JVM将仅在知道对象继承B接口(如果未优化)

的情况下调用b()方法。

所以我认为,首先JVM将转到对象的vtable,然后...如何在vtable中找到b()以及必须生成哪种vtable。

P.S问题根本不是关于Java的。可能是C ++或PHP的示例,没关系。用Java编写示例更简单

1 个答案:

答案 0 :(得分:-2)

具有多个继承的VTable通常是通过vtable调度程序实现的。这意味着您将为每个继承的接口创建一个vtable,并根据使用的接口传递匹配的vtable。

在您的情况下,您将为每个类创建两个vtable。一种与B接口匹配,另一种与A或C接口匹配。通过B接口传递您的课程时。您将类数据指针+指针传递给B接口vtable。