日期:2014-05-20  浏览次数:20619 次

请教关于JNI C++层中调用Java函数 - 熟悉JNI的回答。
在 C++中调用的的Java函数f,可以在so文件生成后,再改写实现么。
或者说,这个函数f可以调用抽象方法么?
代码如下:
abstract class A {
  native void callF();/* we call f() in this implementation. */

  void f() {
  abstractF(); 
  }

  abstract void abstractF();
}

class B extends A {
 void abstractF() { ... }
}

// calling codes:
A a = new B();
a.callF();

以上可以正常运行么? 就是 B的abstractF()会被正常调用么?



------解决方案--------------------
1.答:可以.
2.答:jni层可以不变,只要是针对抽象编程(针对抽象类A的引用来编程),以后不论增加多少个A的派生类,只要传递给派生类的实例去调用,就可以调用到具体派生类的方法