java调用祖父类里被父类重写了的实例方法
来源:互联网 发布:php网站文件管理 编辑:程序博客网 时间:2024/04/29 21:21
java.lang.invoke
包主要用于动态确定目标方法
在java语言中无法把函数作为一种参数进行传递,C++
里有函数指针,C#
里有相似的delegate、event类型。在java
里普遍的做法是传递1个实现了某个接口实例作为参数。 MethodHandle
可以让java语言拥有跟函数指针类似的工具
public class AncestorsRelation { class Grandfather{ public void say(){ System.out.println("It's grandfather said!"); } } class Father extends Grandfather{ public void say(){ System.out.println("It's father said!"); } } class Son extends Father{ public void say(){ //如何在此处调用Grandfather的say方法 //方法1: //new Grandfather().say(); //方法2: //使用MethodHandle调用Grandfather的构造函数后再调用say方法 } }}
第二种方法实现如下
public void say(){ System.out.println("It's son said!"); //使用MethodType构造出要调用方法的返回类型 MethodType methodType = MethodType.methodType(void.class); try { //找到祖父类的构造函数 MethodHandle inithandle = MethodHandles.lookup().findConstructor(Grandfather.class, methodType); //获取祖父类实例对象 Object o = inithandle.invoke(); //找到祖父类里被覆写的方法并把该方法绑定到祖父类实例上 MethodHandle handle = MethodHandles.lookup() .findVirtual(Grandfather.class, "say", methodType).bindTo(o); //调用祖父类里被父类覆写的方法 handle.invoke(); } catch (Throwable throwable) { throwable.printStackTrace(); } }
阅读全文
0 0
- java调用祖父类里被父类重写了的实例方法
- JAVA调用重写的祖父方法
- 虚拟方法跳过父类继承调用祖父类的代码
- Java重写方法典型实例
- Java调用子类重写方法
- java字符串替换字符串实例,对replace方法的重写
- java 父构造器中调用子类重写的方法
- java父类调用被子类重写的方法
- Java的重写与调用父类方法问题
- Java的重写与调用父类方法问题
- JAVA-方法的重写
- java 方法的重写
- Java方法的重写
- Java的方法重写
- JAVA 方法的重写
- java方法的重写
- 重写了Servlet的init方法后一定要记得调用父类的init方法
- 重写了Servlet的init方法后一定要记得调用父类的init方法
- c指针
- Handler机制和Can't create handler inside thread that has not called Looper.prepare()异常
- async 和await的结合promise用法
- Linux系统运维工程该具备哪些素质
- GCC编译系统基本过程详解
- java调用祖父类里被父类重写了的实例方法
- centos 安装docker
- oracle常用的时间格式转换
- 2017夏天之哪凉快去哪里 之四
- 1072 威佐夫游戏(威佐夫博弈模板)
- 堆栈内存溢出demo
- 传智播客-Java学习笔记day27
- 设计模式之装饰模式
- 10个JavaScript难点