1.在java类中新建两个类
Man类
public class Man extends Human{
@Override
public void sayHi() {
}
public void sayHi2(){
super.sayHi();
}
}
Human类
public class Human {
public void sayHi(){
System.out.println("浜烘墦鎷涘懠...");
}
}
JNITest类中定义
public Human mHuman = new Man();
定义获取父类方法
public native void accessNovirtualMethod();
2.javah生成头文件
/*
* Class: com_boom_JNITest
* Method: accessNovirtualMethod
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessNovirtualMethod
(JNIEnv *, jobject);
3.在源文件中实现具体//调用父类的方法
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessNovirtualMethod
(JNIEnv *env, jobject jobj){
jclass cls = (*env)->GetObjectClass(env, jobj);
//获取man属性
jfieldID fid = (*env)->GetFieldID(env,cls,"human","Lcom/boom/Human");
//获取
jobject human_obj = (*env)->GetObjectField(env,jobj,fid);
//执行sayHi()方法
jclass human_cls = (*env)->FindClass(env,"com/boom/Human");//注意传父类的名称
jmethodID mid = (*env)->GetMethodID(env,human_cls,"sayHi","()V");
//执行
//(*env)->CallObjectMethod(env,human_obj,mid);
//调用的父类方法
(*env)->CallNonvirtualObjectMethod(env,human_obj,human_cls,mid);
}