Jni中使用多态_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2299 | 回复: 0   主题: Jni中使用多态        下一篇 
    本主题由 koei123 于 2015-7-26 22:50:09 移动
cc
注册用户
等级:中校
经验:1900
发帖:195
精华:0
注册:2011-7-25
状态:离线
发送短消息息给cc 加好友    发送短消息息给cc 发消息
发表于: IP:您无权察看 2015-7-16 15:16:49 | [全部帖] [楼主帖] 楼主

假设有如下两个类:

1:publicclass Foo {
   2:
   3: }
   4:
   5:publicclass Bar extends Foo {
   6:publicvoid Print() {
   7:         System.out.println("Bar::Print().");
   8:     }
   9: }

又有如下方法:

1:public Foo Current() {
   2:return (Foo) new Bar();
   3: }

在Java中,要想将Current返回的对象当作Bar对象用,必须按如下方式:

1: Foo foo = Current();
   2: ((Bar) foo).Print();


如果是在Jni中,该如何实现这一调用呢?经过试验,按如下调用即可:

1: midCurrent = (*env)->GetMethodID(env, clsTestPoly, "Current", "()LTestPolymorphism/Foo;");
   2: FAILED_RETURN(midCurrent);
   3:
   4: objFoo = (*env)->CallObjectMethod(env, objmTestPoly, midCurrent);
   5: FAILED_RETURN(objFoo);
   6:
   7: clsBar = (*env)->FindClass(env, "TestPolymorphism/Bar");
   8: FAILED_RETURN(clsBar);
   9:
  10: midPrint = (*env)->GetMethodID(env, clsBar, "Print", "()V");
  11: FAILED_RETURN(midPrint);
  12:
  13: (*env)->CallObjectMethod(env, objFoo, midPrint);


        第1行用来获取Current函数的id号;

     第4行用来调用Current获取Foo对象(实际上是Bar对象);

     第7行用来获取Bar类的实体;

     第10行用来获取Bar对象的Print方法;

     第13行用来调用Foo对象(实际上是Bar对象)的Print方法,实现了和上面一致的用法。

--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-7-26 22:50:09



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论