weixin_42499804 2012-05-26 22:31
浏览 1062
已采纳

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

spublic Method[] getDeclaredMethods()
throws SecurityException返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。

下面一段代码在Sausage 写了两个方法,其中一个是重写了父类的getIngredient() 方法。Sausage.class.getDeclaredMethods()却返回了三个方法,包括两个getIngredient() 和他自己的showDescription()方法,请问这是为什么?为什么会拿到了父类的方法?
[code="java"]
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);
}

}
[/code]

  • 写回答

2条回答 默认 最新

  • wanghuanqiufly 2012-05-27 15:43
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图