getMethods()获取的是所有public方法,包括:类自身声明的public方法、父类中的public方法、实现的接口方法。
getDeclaredMethods()获取的是类中所有方法,也就是源文件中有哪些方法,就会获取到哪些,包括:类自身的方法、重写的父类的方法、实现的接口方法。
举例说明:
public class Parent {
public String publicField = "publicField";
String defaultField = "defaultField";
protected String protectedField = "protectedField";
private String privateField = "privateField";
public void publicMethod() {
System.out.println("publicMethod");
}
void defaultMethod() {
System.out.println("defaultMethod");
}
protected void protectedMethod() {
System.out.println("protectedMethod");
}
private void privateMethod() {
System.out.println("protectedMethod");
}
public Parent() {
}
protected Parent(String str) {
}
private Parent(String str,String str1) {
}
}
public class Child extends Parent implements SomeInterface{
public String ChildPublicField = "ChildPublicField";
String ChildDefaultField = "ChildDefaultField";
protected String ChildProtectedField = "ChildProtectedField";
private String ChildPrivateField = "ChildPrivateField";
public void ChildPublicMethod() {
System.out.println("ChildPublicMethod");
}
void ChilddefaultMethod() {
System.out.println("ChilddefaultMethod");
}
protected void ChildprotectedMethod() {
System.out.println("ChildprotectedMethod");
}
private void ChildprivateMethod() {
System.out.println("ChildprivateMethod");
}
//重写父类方法
@Override
protected void protectedMethod() {
}
//重写父类的方法
@Override
void defaultMethod() {
}
public Child() {
}
protected Child(String str) {
}
private Child(String str,String str1) {
}
@Override
public void interfacePublicMethod() {
System.out.println("interfacePublicMethod");
}
}
public interface SomeInterface {
public static final String interfacePulicField = "interfacePulicField";
public void interfacePublicMethod();
}
测试:
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
Class<Child> Class = Child.class;
Method[] methods = Class.getMethods();
Method[] declaredMethods = Class.getDeclaredMethods();
System.out.println("getMethods():");
for(Method method:methods) {
System.out.println("method name:"+method.getName());
}
System.out.println("getDeclaredMethods():");
for(Method method:declaredMethods) {
System.out.println("method name:"+method.getName());
}
}
}
测试结果:
getMethods():
method name:ChildPublicMethod
method name:interfacePublicMethod
method name:publicMethod
method name:wait
method name:wait
method name:wait
method name:equals
method name:toString
method name:hashCode
method name:getClass
method name:notify
method name:notifyAll
getDeclaredMethods():
method name:protectedMethod
method name:defaultMethod
method name:ChildPublicMethod
method name:ChilddefaultMethod
method name:ChildprotectedMethod
method name:ChildprivateMethod
method name:interfacePublicMethod
所以,getMethods()会获取到:
1、本类所有public方法
2、父类,以及父类的父类的public方法
3、实现的接口方法
getDeclaredMethods()会获取到本类源码文件中所有能看到的方法