Ndk学习之JNI调用父类方法(java-->C)

本文介绍如何通过JNI在C/C++代码中调用Java类的父类方法,包括创建Java类、生成JNI头文件及实现具体调用逻辑。
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);
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值