我目前正在使用我的编程语言,它将仅具有接口并且没有对象继承。还有一个问题,因为我不知道如何制作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编写示例更简单
答案 0 :(得分:-2)
具有多个继承的VTable通常是通过vtable调度程序实现的。这意味着您将为每个继承的接口创建一个vtable,并根据使用的接口传递匹配的vtable。
在您的情况下,您将为每个类创建两个vtable。一种与B接口匹配,另一种与A或C接口匹配。通过B接口传递您的课程时。您将类数据指针+指针传递给B接口vtable。