我把一个接口的一个方法的返回类型从void改成了int,但是调用这个方法的某些类不需要知道返回类型所以没做修改,因此也没有重新编译,结果调用这些类的相关功能时就抛了找不到该方法的异常,将这些调用那个方法但没做修改的类重新编译后,就可以了,想请教一下java底层调用其他类的方法的底层是如何实现的?

解决方案 »

  1.   

    interface A{
       public void getCount();改成了public int getCount();
    }
    class AImpl implements A{
      ........
    }
    Class B{
      public void invoke(){
        A a = new AImpl();
        a.getCount();//这不需要知道返回值是多少
      }
    }
    B类没做修改
    Class C{
      public void invoke(){
       A a = new AImpl();
       int count = a.getCount();//该行修改前是 a.getCount()
     }
    }
    当调用B类的invoke方法时抛了找不到getCount(J)V方法异常,重新编译B类之后再调用就可以了
      

  2.   


    接口A的实现方法AImpl里面对应的getCount()进行修改
      

  3.   

    java在处理lz说的这种情况时,时在运行时才做出匹配的,所以你抛出的应该时运行时异常。而有些异常时需要在编译的时候做检查的,又叫受查异常。底层的区别就是一个是在运行的时候匹配,一个是在编译的时候匹配。
      

  4.   

    真不知道该如何回答你的问题,看不明白到底想知道什么。没有重新编译的话,返回的类型不一致了,所以调用方法会有异常。至于底层实现
    A a = new AImpl();      //创建了对象实例。//接着你就可以对对象操作了
    a.getCount();//这不需要知道返回值是多少 不知道你还想知道什么?