解决方案 »

  1.   

    我觉得这应该没有任何方法可以做到(除了分析源代码之外)。而且如果你有这样的需求的话,那只能说明设计有问题。破坏了面向对象的一些设计的基本原则。否则设计者就应该考虑在将父类的该方法设计成abstract方法,或者是父类的默认实现是抛出异常。
      

  2.   

    package com.test;import java.lang.reflect.Method;public class B extends A {
    @Override
    public void test1(int i) {
    System.out.println("B test1");
    }
    public void test2() {
    System.out.println("B test2");
    }
    public void test3() {
    System.out.println("B test3");
    }
    public static void main(String[] args) {
    B b = new B();
    Method[] bfs = b.getClass().getDeclaredMethods();
    Method[] afs = b.getClass().getSuperclass().getDeclaredMethods();
    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) {
    System.out.println(b.getClass()+" has method " + bm.getName() + 
    " override " + b.getClass().getSuperclass());
    }
    }
    }
    }
    }
    }
    }
      

  3.   

    package com.test;public class A {
    public int test1(int i) {
    System.out.println("A test1");
    return 0;
    }
    public void test2() {
    System.out.println("A test2");
    }
    }
      

  4.   

    package com.test;public class A {
    public void test1(int i) {
    System.out.println("A test1");
    }
    public void test2() {
    System.out.println("A test2");
    }
    }
      

  5.   

    用getDeclaredMethods方法竟然真能够做到,从来只用过getMethods方法,没有用过getDeclaredMethods方法。不好意思,是我孤陋寡闻了。