从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错。
public class ClassA {
public void init(String i){
System.out.println("ClassA:"+i);
}
}
public class ClassB extends ClassA {
public void init(String i){
System.out.println("ClassB:"+i);
}
}
public class TestInvoke {
public static void main(String[] args) throws Exception{
ClassA classA = new ClassA();
ClassB classB = new ClassB();
//正确调用
Method method = classA.getClass().getDeclaredMethod("init",new Class[]{String.class});
//出错
//Method method = classB.getClass().getDeclaredMethod("init",new Class[]{String.class});
method.invoke(classA,new Object[]{"ssss"});
method.invoke(classB,new Object[]{"ssss"});
}
}