我可以找出继承给定方法实现的类吗?例如在当前对象中,使用toString()实现,从Object类或其他一些父类?
答案 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() {
}
}