为了账号安全,请及时绑定邮箱和手机立即绑定

getDeclaredMethods方法为什么会拿到父类的方法?

getDeclaredMethods方法为什么会拿到父类的方法?

浮云间 2019-03-21 18:15:13
spublic Method[] getDeclaredMethods()throws SecurityException返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。下面一段代码在Sausage 写了两个方法,其中一个是重写了父类的getIngredient() 方法。Sausage.class.getDeclaredMethods()却返回了三个方法,包括两个getIngredient() 和他自己的showDescription()方法,请问这是为什么?为什么会拿到了父类的方法?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); }}
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

本身子类已经继承了父类的getingredient方法返回的是objec,而子类中又定义了一个返回ArrayList的getingredient方法,如果你调用子类的getingredient方法,它应该执行哪个方法?所以实际上市一个类中两个重名的方法,这样getdeclaredMethods返会两个getingredient就不奇怪了。否者定义的时候就会出错。


查看完整回答
反对 回复 2019-04-26
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

你看看什么叫重写,返回类型是不能变得!!!


查看完整回答
反对 回复 2019-04-26
  • 3 回答
  • 0 关注
  • 2366 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信