我找不到一个好的总结来描述我的问题(欢迎提出建议)
我有以下两个类:
测试 1
import java.lang.reflect.Method;
abstract class Test1 {
boolean condition = true;
public void f() {
System.out.println("Test1 : f");
}
public void g() {
System.out.println("Test1 : g");
f();
if (condition) {
f(); // call Test1.f() here. HOW?
// Following didn't work
try {
Method m = Test1.class.getDeclaredMethod("f");
m.invoke(this);
} catch (Exception e) {
System.err.println(e);
}
}
}
}
测试2
class Test2 extends Test1 {
public void f() {
System.out.println("Test2 : f ");
}
public static void main(String[] args) {
Test2 t2 = new Test2();
t2.g();
}
}
输出是:
Test1 : g
Test2 : f
Test2 : f
Test2 : f
问题是由于 Test1
中的 condition
字段给出的一些特殊条件,我想调用 Test1
的 f ()
在 g()
中,即使我正在使用 Test2
的对象进行调用。
我尝试了反射,但它也不起作用。有什么建议吗?
编辑 1: 我没有具体提到它,但如果你仔细看,Test1 是抽象的。所以我无法创建它的对象。
最佳答案
您应该认真考虑要构建的逻辑。您尝试覆盖子类中的方法 f 的原因肯定有其背后的原因。
或者,您可以将 boolean 值作为方法 f 的返回值,并在子方法中使用 boolean r = super.f(); if(r){//执行子逻辑。
这应该可以解决您的问题。
关于java - 在父类(super class)中调用父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358012/