我有代码可以找到
B
类的所有方法。
import java.lang.reflect.Method;
public class Main {
public static class A {
public Object e() { return new Object(); }
}
public static class B extends A {
@Override
public String e() { return "hi"; }
}
public static void main(String[] args) {
for (Method md : B.class.getDeclaredMethods()) {
System.out.println("Name: " + md.getName());
System.out.println("Declaring class: " + md.getDeclaringClass().getName());
System.out.println("Return type: " + md.getReturnType().getName());
}
}
}
这是代码返回的内容:
Name: e
Declaring class: Main$B
Return type: java.lang.String
Name: e
Declaring class: Main$B
Return type: java.lang.Object
但是,我无法区分重写的方法和原始方法,因为它们具有相同的声明类。我的问题是:在没有给出类的代码的情况下,如果一个方法的返回值与超类方法不同,我如何确定该方法是否被继承。
编辑: 这与我之前的问题不同,因为它是关于接口的,而这个问题是关于继承的。
对照父类检查声明类。
Method m = B.class.getMethod("e");
boolean o = m.getDeclaringClass() != A.class;