NDK / JNI - C ++虚拟继承实现

时间:2017-05-05 00:30:13

标签: java android c++ android-ndk java-native-interface

我刚刚开始使用Android NDK,我遇到了一些问题,了解如何在C ++类中正确实现虚方法的继承。

我有以下课程:

class IA
{
public:
    virtual void foo() = 0;
}

class IB :
    public virtual IA
{
public:
    virtual void bar() = 0;
}

class A :
    public IA
{
public:
    void foo();
}

class B :
    public A,
    public IB
{
    void bar();
}

等效的Java类:

public class A extends Pointer
{
    public native void foo();
}

public class B extends A
{
    public native void bar();
}

但是我得到以下编译器错误:

note: unimplemented pure virtual method 'foo' in 'B'
virtual void foo() = 0;

error: allocating an object of abstract class type 'B'
return new B();

如果我在foo()中覆盖B,问题似乎已得到解决,即:

class B :
    public A,
    public IB
{
    void bar();

    // Overridden from A
    void foo();
}

void B::foo()
{
    A::foo();
}
public class B extends A
{
    public native void bar();

    @Override
    public native void foo();
}

然而我无法理解为什么这是必要的。如果有人能帮助我理解这一点,我将不胜感激。

0 个答案:

没有答案