JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法
1、关键在于:
使用的 method id 是 子类的 还是 父类的,而 父类methodID的获取 必须使用 父类的class对象。
2、VC6(CPP)的DLL代码:
#include<stdio.h>
#include "jniZ_TjniFatherMethod.h" JNIEXPORT void JNICALL Java_jniZ_TjniFatherMethod_NativeFunc(JNIEnv * env, jobject obj, jobject _father)
{
// 获取obj中对象的class对象
jclass clazzChild = env->GetObjectClass(_father); // 这里返回的是 子类的 Class对象
jmethodID methodIdChild = env->GetMethodID(clazzChild, "Show", "()V"); // 这里获取的是 子类的 Show()方法的ID jclass clazzFather = env->GetSuperclass(clazzChild); // 获取 父类的 Class对象
jmethodID methodIdFather = env->GetMethodID(clazzFather, "Show", "()V"); // 这里获取的是 父类的 Show()方法的ID // 1、使用的是 子类的 method id
// (1) 两个参数
env->CallVoidMethod(_father, methodIdChild); // 子类的 Show()方法
// (2) 三个参数
env->CallNonvirtualVoidMethod(_father, clazzFather, methodIdChild); // 子类的 Show()方法 // 1、使用的是 父类的 method id
// (3)
env->CallVoidMethod(_father, methodIdFather); // 子类的 Show()方法
// (4)
env->CallNonvirtualVoidMethod(_father, clazzFather, methodIdFather);// 父类的 Show()方法
// (5)
env->CallNonvirtualVoidMethod(_father, clazzChild, methodIdFather);// 父类的 Show()方法 // ZC: 可见,调用 子类 还是 父类的方法,关键看 methpd id 属于谁 ...
}
3、Java代码:
package jniZ; public class TjniFatherMethod
{
public native void NativeFunc(Tparent _father); public static void main(String[] args)
{
Tchild01 child01 = new Tchild01();
((Tparent)child01).Show(); System.out.println("\n*** *** ***\n"); System.loadLibrary("JniFatherMathod_VC6");
TjniFatherMethod jniZ = new TjniFatherMethod();
jniZ.NativeFunc((Tparent)child01);
}
} class Tparent
{
public void Show()
{
System.out.println("Tparent");
}
} class Tchild01 extends Tparent
{
public void Show()
{
System.out.println("Tchild01");
}
}
4、Java控制台输出:
Tchild01 *** *** *** Tchild01
Tchild01
Tchild01
Tparent
Tparent
5、
JNI_Z_06_方法的操作(没有String类型的参数)_父类的同名方法的更多相关文章
- JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式
1. 2.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_TjniMethod02.h" JNIEXPORT void ...
- JNI_Z_05_方法的操作(没有String类型的参数)
1.步骤: (1).获取 jclass (2).获取 method的id (3).调用 method ZC: 貌似 JNI里面 操作 类的方法,完全是 无视 访问权限的... 然而 static的方法 ...
- 关于ASP.NET中WEBAPI中POST请求中FromBody修饰的string类型的参数服务器端获取不到值FromBody空值的简单解决方法
其实解决办法很简单,就是POST请求的时候,来自实体的参数,content-type:application/x-www-form-urlencoded情况下,是默认按照键值对来解析的,比如param ...
- 在LoadRunner中从数组类型的参数随机取值的方法
在LoadRunner中从数组类型的参数随机取值的方法 使用web_reg_save_param做关联后,有时候会有多个匹配值. 为了模仿用户行为随机取一个值为后续transcation所用,可以使用 ...
- C# 通过ServiceStack 操作Redis——String类型的使用及示例
1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...
- 再谈怎样以最简单的方法将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式
今天review代码,看见某些大爷在将泛型为String类型的集合或String类型的数组转化为逗号间隔字符串形式时仍然仅仅顾结果不注重过程,"大爷"咱能负点责任吗? 将泛型为St ...
- String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
1:String类型 #include <iostream> using namespace std; int main() { //初始化方法 string s1 = "hel ...
- Switch能否用String类型做参数?
switch(expr): 其中,expr参数可以是一个枚举常量(由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其包装类Integer.由于byte.short和char ...
- [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形
目录:[Swift]Xcode实际操作 本文将演示如何使用图形上下文,绘制自定义图形. 使用快捷键[Command]+[N]创建一个新的类文件. (在项目文件夹[DemoApp]上点击鼠标右键[New ...
随机推荐
- 【IDEA】启动项目报错:3 字节的 UTF-8 序列的字节 3 无效
一.报错和原因: 项目起服务出错.具体报错就不贴了,报错主要是"3 字节的 UTF-8 序列的字节 3 无效". 分析:主要就是项目编码问题,IDEA中估计就是配置不对,没必要纠结 ...
- 帝国CMS 7.2数据导入后的参数修正
1.日期转时间戮,HTML文件名,目录名更改 update cms_ecms_jdba set newstime = UNIX_TIMESTAMP(submitTime),titleurl = CON ...
- 找不到Microsoft Access Driver(*.mdb)ODBC驱动程序的安装例程。请重新安装驱动
按照教材创建的方法:“控制面板-管理工具-数据源(ODBC)”,打开“ODBC数据源管理器”窗口,然后“添加”,打开“创建新数据源”的窗口,最后选择Microsoft Access Driver(*. ...
- 命名空间 <iostream>和<iostream.h> 由程序设计者命名的内存区域
namespace_百度百科 https://baike.baidu.com/item/namespace/1700121?fromtitle=命名空间 namespace即“命名空间”,也称“名称空 ...
- 命令行操作flask
Flask-Script 先安装pip3 install Flask-Script from sansa import create_app from flask_script import Mana ...
- XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法
无法显示网页 目前访问网站的用户过多. -------------------------------------------------------------------------------- ...
- MySQL中的共享锁与排他锁
MySQL中的共享锁与排他锁 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共 ...
- Django HttpRequest对象详解
WSGIRequest对象 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.也就是我们经常看到 ...
- 上手Keras
Keras的核心数据是“模型”,模型是一种组织网络层的方式.Keras中主要的模型是Sequential模型,Sequential是一系列网络层按顺序构成的栈. Sequential模型如下: fro ...
- PHP连接局域网MYSQL数据库的实例
PHP连接局域网MYSQL数据库的例子. 代码: ?> 第一行ip对应局域网某台主机,关于局域网内mysql连接可参考我的摘抄 ...