gpt4 book ai didi

java - 使用反射调用父类(super class)方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:45 24 4
gpt4 key购买 nike

我有 2 个类,比如 A 和 B:

Class A extends B {
public void subClassMthd(){
System.out.println("Hello");
}
}

Class B {
public void printHelloWorld {
System.out.println("Hello");
}
}

现在,我正在使用反射来调用类 A 上的方法。我还想调用类 B 中存在的 printHelloWorld 方法。

我试过用

Class clazz = Class.forName("com.test.ClassA");
Object classAInstance= clazz.newInstance();
Method superClassmthd = classAInstance.getClass()
.getSuperclass().getMethod("printHelloWorld", null);
superClassmthd.invoke(classAInstance);

也试过

Class clazz = Class.forName("com.test.ClassA");
Object classAInstance= clazz.newInstance();
Class superClazz = Class.forName(classAInstance.getClass().getSuperclass().getName());
Object superclassInstance = superClazz.newInstance();
Method superClassmthd = superclassInstance.getMethod("printHelloWorld", null);
superClassmthd.invoke(superclassInstance );

但是它们都不起作用;他们扔了一个InstantiationException .

我在这里做错了什么?

最佳答案

试试这个:

Method mthd = classAInstance.getClass().getSuperclass().getDeclaredMethod("XYZ");
mthd.invoke(classAInstance)

区别在于使用 getDeclaredMethod() ,它获取所有可见性的方法(publicprotected、package/default 和private) 而不是 getMethod() ,它只获取具有 public 可见性的方法。

关于java - 使用反射调用父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14455526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com