Jni中使用多态

      假设有如下两个类:

   1: public class Foo {
   2:  
   3: }
   4:  
   5: public class Bar extends Foo {
   6:     public void 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方法,实现了和上面一致的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值