Java 使用基础 class 继承本机方法

Java use base class for inherited native method

如果我有

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 中的本地方法?我问是因为我有一堆 classes 继承自 bass class 并以以下形式实现本地方法:

org_mikesolomon_soq_A_foo
org_mikesolomon_soq_B_foo
org_mikesolomon_soq_C_foo
org_mikesolomon_soq_D_foo

其中 ABCD 都继承自基础 class。这将使我免于写出

public native void foo();

每个 class.

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

不清楚您到底想做什么,但这不会做任何事情。本机方法将被忽略,除非它对应于 Java 本机方法声明。