Jni中使用多态

原创 2011年01月15日 23:42:00

      假设有如下两个类:

   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方法,实现了和上面一致的用法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

使用抽象方法实现多态

  • 2009年04月22日 17:02
  • 66KB
  • 下载

使用多态替代If else或switch的更多尝试

  • sanniao
  • sanniao
  • 2016年11月03日 21:14
  • 2051

多态的使用和概述以及弊端和好处

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

Json使用Jackson实现子类多态

目的: Json序列化/反序列化不需要知道具体子类的类型,只需要根据

数据库关系为多态关联时,适当使用反模式

多态关联: 当一个表中的某列可能要引用多个表,这时候需要增加yi

WCF学习笔记(三)使用(Service)KnownType标记实现继承、多态特性

1.服务器端: ///     /// 实现IExtensibleDataObject接口,表示这个类的派生类也可以序列化     /// IsRequired表示该属性是否需要赋值之后才能序...

C++中类的多态和虚函数的使用

C++的三大特性:封装、继承和多态。   (一)这里主要讨论多态:   类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多...

俺使用的C语言面向对象范式(第四节:多态的实现 与 总结)

四、 多态的实现     在C++中多态有两种,编译时多态,与运行时多态。     而编译时多态指的是函数重载与运算符重载。编译时多态是主要是根据类型识别来实现的,是C++编译器在编译过程中完成的...

使用函数指针和多态代替冗长的if-else或者switch-case

在编程中,if-else和switch-case是很常见的分支结构,很少在程序中不用这些控制语句。但是不能否认,在一些场景下,由于分支结构过分长,导致代码不美观且不容易维护,在《重构》一书中,也将过长...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jni中使用多态
举报原因:
原因补充:

(最多只允许输入30个字)