java判断class子类或父类的实例方法

yizhihongxing

要判断Java中的一个实例方法属于其父类还是子类,可以通过利用Java反射API中的getDeclaredMethod()方法实现。

首先,在Java中,一个对象的所属类可以通过instanceof关键字来判断。但是,如果需要定位该实例方法是被哪个类所声明的,就需要使用Java反射API了。要使用Java反射API获取方法,需要使用Class类的 getDeclaredMethod(String methodName, Class<?>... parameterTypes) 方法。该方法返回一个Method类型的对象,可以使用该对象提供的isAnnotationPresent(Class<? extends Annotation> annotationClass)方法来判断该方法是否被某个注解修饰。如果要判断该方法是否在子类中实现的,则需要获取子类的Class对象并使用该对象的getMethod(String name, Class<?>... parameterTypes)方法获取该方法,在使用Method类提供的getDeclaringClass()方法获取该方法所属的类。

以下是两个示例说明:

示例一

public class SuperClass {
    public void display() {
        System.out.println("This is the display method of superclass");
    }
}

public class SubClass extends SuperClass {
    public void display() {
        System.out.println("This is the display method of subclass");
    }
}

public class Test {
    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        SubClass subObj = new SubClass();
        SuperClass superObj = new SuperClass();

        Method subMethod = subObj.getClass().getDeclaredMethod("display");
        Method superMethod = superObj.getClass().getDeclaredMethod("display");

        System.out.println("The method display() in SubClass is overrided: " + subMethod.toString());
        System.out.println("The method display() in SuperClass is not overrided: " + superMethod.toString());
    }
}

在这个示例中,我们定义了一个父类 SuperClass和一个子类 SubClass,并将 display() 方法在子类中重写。在 Test 类中,我们实例化了 SubClassSuperClass 的对象,并使用 getDeclaredMethod() 方法获取了这两个类中的 display() 方法。然后,我们打印输出了这两个方法的名称和是否被重写的信息。输出结果为:

The method display() in SubClass is overrided: public void practice.SubClass.display()
The method display() in SuperClass is not overrided: public void practice.SuperClass.display()

可以看到,子类中的 display() 方法被重写了,而父类中的 display() 方法没有被重写。因此,这两个方法所属的类也不同。

示例二

public class SuperClass {
}

public class SubClass extends SuperClass {
    public void display() {
        System.out.println("This is the display method of subclass");
    }
}

public class Test {
    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        SubClass subObj = new SubClass();
        SuperClass superObj = new SuperClass();

        Method subMethod = subObj.getClass().getDeclaredMethod("display");
        Method superMethod = superObj.getClass().getMethod("display");

        System.out.println("The method display() in SubClass is not declared in SuperClass: " + subMethod.getDeclaringClass());
        System.out.println("The method display() in SuperClass has no implementation: " + superMethod.getDeclaringClass());
    }
}

在这个示例中,我们定义了一个父类 SuperClass 和一个子类 SubClass,子类中定义了 display() 方法,但是父类中没有该方法的声明。在 Test 类中,我们实例化了 SubClassSuperClass 的对象,并使用 getDeclaredMethod() 方法获取了子类中 display() 方法的 Method 对象,使用 getMethod() 方法获取了父类中 display() 方法的 Method 对象。然后,我们打印输出了这两个方法所属的类。输出结果为:

The method display() in SubClass is not declared in SuperClass: class practice.SubClass
Exception in thread "main" java.lang.NoSuchMethodException: practice.SuperClass.display()
    at java.base/java.lang.Class.getDeclaredMethod(Class.java:2450)
    at practice.Test.main(Test.java:17)

可以看到,由于父类中没有 display() 方法声明,因此在父类中使用 getMethod() 方法获取该方法时会抛出 NoSuchMethodException 异常。而在子类中可以使用 getDeclaredMethod() 方法获取 display() 方法,但是该方法并不属于父类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java判断class子类或父类的实例方法 - Python技术站

(1)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 用python操作浏览器的三种方式

    当今,Python已成为最受欢迎的编程语言之一,它可以用于各种用途,包括自动化浏览器操作。在本攻略中我们将详细讲如何使用Python操作浏览器的三种方式,并提供两个示例说明。 三种方式 方式1:使用selenium库 selenium是流行的Python库,它允许我们自动化浏览器操作。使用selenium,我们可以模拟用户在浏器中的行为,点击链接、填写表单等…

    other 2023年5月8日
    00
  • Pyinstaller加密打包成反编译可执行文件

    Pyinstaller是一个常用的Python打包工具,可以将Python代码打包成可执行文件,但是这款工具并不能完全保护程序代码不被反编译,因此我们需要使用一些额外的手段来加强保护。下面是Pyinstaller加密打包成反编译可执行文件的完整攻略: 一、生成.spec文件 使用命令pyinstaller -h查看帮助信息,发现有一个参数–key可以用来生…

    other 2023年6月25日
    00
  • 电脑启动中的常见故障的种类及其解决方法(图文)

    电脑启动中的常见故障及其解决方法 在使用电脑时,经常会出现各种启动问题,如不能开机、启动慢、系统崩溃等。下面将详细讲解电脑启动中常见故障的种类及其解决方法。 1. 电脑不能开机 如果电脑不能开机,有可能是以下原因: 1.1 电源故障 检查电源插头、电源线、开关,看它们是否正常工作。如果电源灯不亮或电源风扇不动,则可能是电源本身故障。 1.2 主板故障 如果电…

    other 2023年6月27日
    00
  • 为什么不要在 Flutter 中使用全局变量

    为什么不要在 Flutter 中使用全局变量 在 Flutter 中,使用全局变量可能会导致一些问题和不良影响。下面是一些原因和示例说明,解释为什么不建议在 Flutter 中使用全局变量。 1. 命名冲突和难以维护 使用全局变量可能导致命名冲突和代码难以维护。在一个大型的 Flutter 应用程序中,可能会有多个开发人员同时工作,每个人都可能定义自己的全局…

    other 2023年7月29日
    00
  • chrome浏览器快捷键大全

    Chrome浏览器快捷键大全 Chrome浏览器快捷键是提高浏览效率的重要方式。接下来,我将为大家介绍Chrome浏览器常用的快捷键,帮助大家更快更方便地使用Chrome浏览器。 常用的快捷键 基本导航 Ctrl+T:打开新标签页。 Ctrl+W:关闭当前标签页。 Ctrl+Shift+Q:关闭所有标签页并退出Chrome浏览器。 Alt+←:返回上一页。 …

    其他 2023年4月16日
    00
  • IOS开发使用KeychainItemWrapper 持久存储用户名和密码

    IOS开发使用KeychainItemWrapper 持久存储用户名和密码 在 IOS 应用中,要求用户输入账户和密码以进行身份验证是很普遍的需求。但是,为了确保用户输入的凭证不会丢失或者被黑客攻击,我们需要在应用程序中使用安全的方式来存储这些凭证。KeychainItemWrapper 可以帮忙实现安全地存储这些凭证,下面详细介绍一下。 步骤 下载 Key…

    other 2023年6月27日
    00
  • iOS 七大手势之轻拍,长按,旋转手势识别器方法

    iOS 七大手势之轻拍、长按、旋转手势识别器方法的完整攻略 本文将为您提供iOS七大手势之轻拍、长按、旋转手势识别器方法的完整攻略,包括手势识别器的定义、手势识别器的使用、手势识别器的示例说明等内容。 手势识别器的定义 手势识别器是iOS中的一种机制,用于识别用户在屏幕上的手势操作。iOS中提供了七种手势识别器,包括轻拍、长按、滑动、捏合、旋转、轻扫和屏幕边…

    other 2023年5月6日
    00
  • Javascript中字符串相关常用的使用方法总结

    Javascript中字符串相关常用的使用方法总结 在Javascript中,字符串是一种常见的数据类型。在日常的开发过程中,对于字符串的处理十分重要。本篇文章将对Javascript中字符串相关常用的使用方法进行总结,旨在帮助读者更加深入地理解和运用字符串类型的相关知识。 1. 创建字符串 使用单引号创建一个字符串: var str1 = ‘hello w…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部