mark一下使用用法,原理以后在搞:
无参数:
import java.text.SimpleDateFormat; import java.util.Date; import java.lang.reflect.Method; public class Test { public static void main(String[] args) throws Exception { Method animalMethod = Animal.class.getDeclaredMethod("print"); Method catMethod = Cat.class.getDeclaredMethod("print"); Animal animal = new Animal(); Cat cat = new Cat(); animalMethod.invoke(cat); animalMethod.invoke(animal); catMethod.invoke(cat); // catMethod.invoke(animal); } } class Animal { public void print() { System.out.println("Animal.print()"); } } class Cat extends Animal { @Override public void print() { System.out.println("Cat.print()"); } }
输出:
Cat.print()
Animal.print()
Cat.print()
一个参数:
import java.text.SimpleDateFormat; import java.util.Date; import java.lang.reflect.Method; public class Test { public static void main(String[] args) throws Exception { Method animalMethod = Animal.class.getDeclaredMethod("print",String.class); Method catMethod = Cat.class.getDeclaredMethod("print", String.class); Animal animal = new Animal(); Cat cat = new Cat(); animalMethod.invoke(cat, "a"); // 继承可以由上往下 animalMethod.invoke(animal, "b"); catMethod.invoke(cat,"c"); // catMethod.invoke(animal, "d"); // 由下往上会报错 } } class Animal { public void print(String s) { System.out.printf("Animal.print() --%s ", s); } } class Cat extends Animal { @Override public void print(String s) { System.out.printf("Cat.print() --%s ", s); } }
输出:
Cat.print() --a
Animal.print() --b
Cat.print() --c