①创建两个类,一个父类,一个子类
package com.mrlove.test;
public class BaseObject {
public void getObjectName(){
System.out.println("BaseObject");
}
}
package com.mrlove.test;
public class SubObject extends BaseObject{
@Override
public void getObjectName() {
System.out.println("SubObject");
}
public void getParamsLength(String...params){
System.out.println("param's length is:"+params.length);
}
public void getParamsLength(String param1,String param2){
System.out.println(param1 + "-" + param2);
}
}
②测试类,主要测试重载方法的调用、可变参数方法的调用、定参方法的调用
package com.mrlove.test;
import java.lang.reflect.Method;
public class ReflectTest {
private static final String BASE_OBJECT_PATH = "com.mrlove.test.BaseObject";
private static final String SUB_OBJECT_PATH = "com.mrlove.test.SubObject";
public static void main(String[] args) throws Exception{
Class<?> bClazz = Class.forName(BASE_OBJECT_PATH);
Class<?> sClazz = Class.forName(SUB_OBJECT_PATH);
Object bObj = bClazz.newInstance();
Object sObj = sClazz.newInstance();
Method bMethod = bClazz.getDeclaredMethod("getObjectName");
bMethod.invoke(bObj);
bMethod.invoke(sObj);
Method sMethod = sClazz.getDeclaredMethod("getObjectName");
sMethod.invoke(sObj);
Method changeMethod = sClazz.getDeclaredMethod("getParamsLength", String[].class);
String[] strParams = {"a","b","c"};
Object[] cParams = {strParams};
changeMethod.invoke(sObj, cParams);
Method unChangeMethod1 = sClazz.getDeclaredMethod("getParamsLength", String.class,String.class);
unChangeMethod1.invoke(sObj, "Hello","Java");
Class<?>[] clazzs = {String.class,String.class};
Method unChangeMethod2 = sClazz.getDeclaredMethod("getParamsLength", clazzs);
unChangeMethod2.invoke(sObj, "Hello","Java");
}
}