1. 程式人生 > >getMethod()與getDeclaredMethod()的區別

getMethod()與getDeclaredMethod()的區別

getMethod():獲取自身能用所有的公共方法。1.類本身的public 2.繼承父類的public 3.實現介面的public

getDeclaredMethod():獲取類自身宣告的所有方法。

getMethod()獲取繼承父類的public方法舉例:

public class Father {

	public Father() {
		System.out.println("呼叫了父類構造方法");
	}
	
	public void fatherSay() {
		System.out.println("我是爸爸");
	}
}


public class Son extends Father {

	public Son() {
	
		// TODO Auto-generated constructor stub
		System.out.println("呼叫了子類構造方法");
	}
	
	public void sonSay() {
		System.out.println("我你兒子");
	}
	public static void main(String[] args) {
		Son son=new Son();
		son.fatherSay();
	}
}

測試類: 

public class test1 {

	public static void main(String[] args) {
		Class clazz=Son.class;
		try {
              //報錯 NoSuchMethodException
			Method method =clazz.getDeclaredMethod("fatherSay");
			method.invoke(clazz.newInstance());
			
                //執行結果:
                //呼叫了父類構造方法
                //呼叫了子類構造方法
                //我是爸爸
			Method method2 =clazz.getMethod("fatherSay");
			method2.invoke(clazz.newInstance());

		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}