想要通过反射,获取重写了抽象父类的子类中的方法时,将子类与父类的方法名、参数及返回类型进行一一比对。因为子类不能定义与父类方法名、参数及返回类型相同方法
/** 获去子类重写超类的方法list */
public static List<Method> isOverride(Class b) {
Method[] bfs = b.getClass().getDeclaredMethods();
Method[] afs = b.getClass().getSuperclass().getDeclaredMethods();
List<Method> methodsOverride = new ArrayList<Method>();
for (Method bm : bfs) {
for (Method am : afs) {
if (bm.getName().equals(am.getName()) &&
bm.getReturnType().equals(am.getReturnType())) {
Class[] bc = bm.getParameterTypes();
Class[] ac = am.getParameterTypes();
if (bc.length == ac.length) {
boolean isEqual = true;
for (int i = 0; i < bc.length; i++) {
if (!bc[i].equals(ac[i])) {
isEqual = false;
break;
}
}
if (isEqual) {
methodsOverride.add(bm);
}
}
}
}
}
return methodsOverride;
}