【发布时间】:2011-06-16 20:11:38
【问题描述】:
如何判断一个方法是否被子类覆盖?
例如,
public class Test {
static public class B {
public String m() {return "From B";};
}
static public class B1 extends B {
}
static public class B2 extends B {
public String m() {return "from B2";};
}
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) {
B b1 = new B1();
System.out.println("b1 = " + b1.m());
B b2 = new B2();
System.out.println("b1 = " + b2.m());
}
}
给定一个 B 的实例,我如何知道是否有任何派生类具有像 B2 这样的重写方法 m()?
更新:我的问题不清楚。实际上,我试图在不诉诸反思的情况下询问这是否可能。此检查是在一个紧密的循环中完成的,它用于性能黑客以节省一些 CPU 周期。
【问题讨论】:
-
当然,你如何编码不关我的事,但如果你真的需要这些信息,那么可能隐藏在阴影中的是糟糕的 OO 设计
-
我认为不借助反思是不可能的。我同意 biziclop,这是设计不佳的标志。
标签: java inheritance methods overriding introspection