在java中,可以通过“super”关键字,很方便的调用到父类中的方法,但是要调用祖父类的方法该怎么样实现呢,本文记录一下《深入理解java虚拟机》一书中的介绍。
在拥有invokedynamic和java.lang.invoke包之前,使用存粹的java语言很难处理这个问题,原因是子类的方法中根本没有办法获取一个实际类型是祖父类的对象引用,但是有了这两个包,java程序员可以直接解决,在jdk7 update9之前,可以使用以下方法解决:
package com.example.demo.test; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Field; public class TestExtends { public static void main(String[] args){ Son son = new Son(); son.thinking(); } } class GrandFather { public void thinking(){ System.out.println("GrandFather thinking"); } } class Father extends GrandFather { public void thinking(){ System.out.println("Father thinking"); } } class Son extends Father { public void thinking(){ try{ MethodType mt = MethodType.metho