Java使用基类继承本机方法

时间:2015-02-02 18:29:26

标签: java inheritance java-native-interface

如果我有

public class Foo {
  static {
    System.loadLibrary("foo");
  }
  private native void foo();
}

然后

public class Bar extends Foo {
}

在我的JNI中我有:

JNIEXPORT void JNICALL
org_mikesolomon_soq_Bar_foo
  (JNIEnv *env, jobject obj)
{
}

函数foo是否会自动成为Bar的一部分,或者编译器是否期望在foo中将Bar定义为本机方法?我问,因为我有一堆类继承自bass类并以以下形式实现本机方法:

org_mikesolomon_soq_A_foo
org_mikesolomon_soq_B_foo
org_mikesolomon_soq_C_foo
org_mikesolomon_soq_D_foo

其中ABCD都从基类继承。这样可以免除我的写作

public native void foo();

每个班级。

1 个答案:

答案 0 :(得分:2)

本地方法在Foo.中定义提供Bar中的实现没有任何意义,除非在Bar的Java代码中有相应的重写本机方法声明。

目前还不清楚你究竟要做什么,但这不会做任何事情。除非它对应于Java本机方法声明,否则将忽略本机方法。