Java反射 - 从哪个方法继承?

时间:2012-04-05 12:06:36

标签: java reflection

我可以找出继承给定方法实现的类吗?例如在当前对象中,使用toString()实现,从Object类或其他一些父类?

1 个答案:

答案 0 :(得分:7)

尝试Method.getDeclaringClass()link to 1.5 API

  

public Class<?> getDeclaringClass()

     

返回表示声明由此Method对象表示的方法的类或接口的Class对象。

     

指定者:     接口Member

中的getDeclaringClass      

<强>返回:      表示基础成员的声明类的对象


请注意,您无法知道实现类是否仅调用super

public String toString() {
    return super.toString();
}

要确定从中继承方法的类,您需要:

class.getMethod("myMethod").getDeclaringClass();

实施例

public static void main(String[] args) throws Exception {
  System.out.println(String.class.getMethod("toString").getDeclaringClass());
  System.out.println(ArrayList.class.getMethod("toString").getDeclaringClass());
  System.out.println(Area.class.getMethod("toString").getDeclaringClass());
}

输出:

class java.lang.String
class java.util.AbstractCollection
class java.lang.Object

我从问题中注意到你想要获得超级类,如果可用则覆盖该方法。这是一个演示:

import java.lang.reflect.Method;

public class ReflectionCode {
    public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException {
        System.out.println(getInheritedClass(Parent.class.getName(),"overRiddenMethod"));
        System.out.println(getInheritedClass(Child.class.getName(),"overRiddenMethod"));
    }

    public static String getInheritedClass(String className, String method){
        Class clazz;
        try {
            clazz = Class.forName(className);

            if(clazz.getSuperclass() != null && clazz.getSuperclass().getMethod(method) != null)
            {
                return clazz.getSuperclass().getName();
            }
        }catch(Exception e){

        }
        return "none";
    }
}

class Parent  {

    public void overRiddenMethod(){

    }
}

class Child extends Parent {

    public void overRiddenMethod() {

    }
}