Java反射getMethods()与getDeclaredMethods()区别

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()会获取到本类源码文件中所有能看到的方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值