1,两个Java实体类
public class Human { public void sayHi(){ Log.e("LOG","人打招呼......"); } }
public class Man extends Human { @Override public void sayHi() { Log.e("LOG","男人打招呼,。。。。"); } }
2,调用接口
// C访问父类的方法 public native void accessNonvirtualMethod(); public Human human = new Man();
3,头文件
JNIEXPORT void JNICALL Java_com_XXX_XXX_XXX_accessNonvirtualMethod(JNIEnv *, jobject);
4,实现方法
// 访问父类的方法 extern "C" JNIEXPORT void JNICALL Java_com_XXX_XXX_XXX_accessNonvirtualMethod(JNIEnv * env, jobject jobj){ jclass cls = env->GetObjectClass(jobj); // 获取man属性(对象)ID jfieldID fid = env->GetFieldID(cls,"human","LXXX/XXX/model/Human;"); // 获取对象 jobject human_obj = env->GetObjectField(jobj,fid); // 找到sayHi方法 jclass human_cls = env->FindClass("XXX/XXX/model/Human"); jmethodID mid = env->GetMethodID(human_cls,"sayHi","()V"); // 执行sayHi方法 env->CallVoidMethod(human_obj,mid); // 调用父类的方法 env->CallNonvirtualVoidMethod(human_obj,human_cls,mid);
}
5,调用方法
xxx.accessNonvirtualMethod();