0 0

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

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

下面一段代码在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);
    }
}
2012年5月26日 22:31

2个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2012年5月27日 15:43
0 0

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

2012年5月27日 18:13

相关推荐

    java反射获取所有属性,获取所有get方法,包括子类父类

    总结,Java反射机制为我们提供了强大的动态性,能够方便地获取和操作类的属性和方法,包括私有成员和子类父类中的成员。通过熟练掌握反射技术,开发者可以实现更灵活、更动态的代码,但也需要谨慎使用,以避免潜在的...

    java反射操作父类所有属性和方法

    ### Java反射操作父类所有属性和方法 #### 一、引言 在Java编程语言中,反射(Reflection)是一项强大的特性,它允许程序在运行时动态地获取类的信息,并能够直接操作这些信息。通过反射,我们可以获取类的字段、...

    用反射的方式获取父类中的所有属性和方法

    例如,如果我们有一个名为`MyClass`的类,我们可以这样获取它的父类: ```java Class&lt;?&gt; superClass = MyClass.class.getSuperclass(); ``` 2. 获取父类的所有属性: 有了父类的`Class`对象后,我们可以通过`...

    java反射机制学习(三):通过反射获取实体类的属性、方法、接口和父类信息

    Java反射机制是Java语言...通过`Class`对象,我们可以获取类的详细信息,包括但不限于字段、方法、接口和父类,这为我们提供了强大的编程灵活性。在实际开发中,应谨慎使用反射,因为它可能会降低代码的可读性和性能。

    java中Class.getMethods()和Class.getDeclaredMethods()方法的区别

    Java 中 Class.getMethods() 和 Class.getDeclaredMethods() 方法的区别 Java 中的 Class.getMethods() 和 Class.getDeclaredMethods() 是两个常用的方法,它们都可以用来获取某个类的方法,但是它们之间存在着一些...

    使用Java反射机制逆向分析类方法之间的关系.zip

    接下来,我们可以遍历这些方法,分析它们的参数类型、返回类型以及是否为静态或抽象方法等属性。 ```java for (Method method : methods) { System.out.println("方法名:" + method.getName()); System.out....

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    对于有成员值的注解,可以使用`Annotation`对象的`annotationType().getDeclaredMethods()`来获取成员方法,然后调用这些方法来获取值。例如,对于注解`@MyAnnotation(value="test")`,可以这样获取值: ```java ...

    JAVA读取同一路径下所有类及其方法

    我们使用 `getDeclaredMethods` 方法来获取该类的所有方法,然后遍历每个方法,检查其是否拥有 `DescriptionAnno` 注解,如果是,则将其描述信息输出。 结论 在本文中,我们提供了一种获取同一路径下所有类及其...

    frida反射调用对象中的方法与字段.pdf

    - `getDeclaredMethods`:这个方法可以用来获取对象的所有声明方法,同样包括公有、保护、默认(包)访问和私有方法,但不包括继承的方法。 - `getDeclaredField(String name)`:这个方法可以用来获取对象中特定名称...

    651.649.JAVA基础教程_反射-获取运行时类的方法结构(651).rar

    2. `getDeclaredMethods()`:返回类自身声明的所有方法,不包括继承的方法,但包括私有方法和接口中的方法。 3. `getMethod(String name, Class&lt;?&gt;... parameterTypes)`:根据指定的方法名和参数类型获取公共方法,...

    Java反射类中属性方法

    - `getDeclaredMethods()`:返回当前类声明的所有方法,不包括超类方法。 - `getMethod(String name, Class&lt;?&gt;... parameterTypes)`:根据方法名和参数类型获取公共方法。 - `getDeclaredMethod(String name, ...

    java反射基本方法测试

    5. 获取方法:`getMethods()`返回所有公共方法,`getDeclaredMethods()`返回所有方法。 6. 调用方法:`getMethod(String name, Class&lt;?&gt;... parameterTypes)`或`getDeclaredMethod(String name, Class&lt;?&gt;... ...

    java 反射得到某个方法

    `Class`类提供了`getMethods()`方法,它会返回一个`Method`对象数组,包含了类及其所有父类的所有公共方法。如果只想获取类自身声明的方法,可以使用`getDeclaredMethods()`。 ```java Method[] methods = clazz....

    java反射,获取所有属性、方法以及List集合类

    使用`getFields()`方法可以获取到类的所有public字段,如果需要获取包括私有的和受保护的字段,可以使用`getDeclaredFields()`方法。这些`Field`对象提供了设置和获取字段值的能力,通过`set()`和`get()`方法。 `...

    一些Java中不为人知的特殊方法.docx

    `getDeclaredMethods()`和`getMethods()`方法会返回包括合成方法在内的所有方法,这就是为什么通过反射可以发现这些原本在源代码中看不到的方法。 **桥接方法(Bridge Methods)** 桥接方法是Java泛型和类型擦除的...

    junit测试private函数

    2. **获取私有方法的Method对象**:使用`Class`对象的`getDeclaredMethods()`方法,可以获取类中所有的方法,包括私有方法。然后通过`getMethod()`或`getDeclaredMethod()`方法,指定方法名和参数类型,获取私有方法...

    Java反射机制的使用和学习方法

    - `getMethod()`, `getField()`, `getConstructor()`:获取指定名称的方法、字段或构造器,它们不包含父类的成员。 4. **反射示例**: 在给出的代码示例中,`MyTest`类展示了如何使用反射API获取用户输入的类的...

    Java程序设计示例教程.docx

    `Method`类代表类中的单个方法,通过`getDeclaredMethods()`可以获取类中所有声明的方法,包括私有方法和父类的方法。每个`Method`对象包含了方法名、返回类型、参数类型等信息。例如,`Method m[] = c....

    ReflectTest

    在"ReflectTest"这个测试中,我们将深入探讨如何使用反射来访问和操作类的属性、方法以及注解,同时也会涉及到泛型的处理。下面我们将详细讲解这些知识点。 首先,让我们从属性的获取开始。在Java中,我们可以使用`...

Global site tag (gtag.js) - Google Analytics