下面这段代码应该输出几呢? 为什么?
import java.util.*;
import java.lang.reflect.*;class Food{
private Object ingredient; public Object getIngredient(){
return ingredient;
}         public void showDescription(){         }}class Sausage extends Food{
private ArrayList ingredient; public ArrayList getIngredient(){
return ingredient;
}         public void showDescription(){
                  System.out.println("I'm very delicious!");
         }
}class Test{ public static void main(String[] args) throws Exception{
Method[] ms = Sausage.class.getDeclaredMethods();
System.out.println(ms.length);
}
}

解决方案 »

  1.   

    理论是应该是2........
    父类是不会被统计进去的...错误的重载导致反射取得的方法有3,
    其中两个getIngredient,一个showDescription也不知道为什么会有两个getIngredient..求高手解答...
      

  2.   

    顶一下开始以为会编译不通过,结果是大概是这样的。
    如果子类重写的 返回值  instanceof 父类的 返回值,编译可以通过。是不是这样就算完全重写?重写好像规定,参数,方法名,甚至抛的异常都必须相同,要么有,要么抛相同的异常。至于返回值,大概也要相同,才算完全覆盖?
    所以我认为返回3不怎么奇怪,奇怪的是这个编译问题。求大牛解释。。
      

  3.   

    有一个问题,根据帮助文档。getDeclaredMethods()方法返回的方法数是不包括从父类继承而来的方法的……
      

  4.   

    编译没问题,若是以前的java,可能是不允许override改变返回值类型的,现在的语法可以这么写。