【发布时间】:2012-01-13 15:40:26
【问题描述】:
给定几个类/接口。
public interface A {
public int doSomthing(int x);
}
public class B implements A {
int doSomthing(int x){
//actually do something
};
}
public class C extends B {
//does some specific implementations of what B does
// but does NOT override "int doSomething(int)"
}
如何在使用实现 C(或 C 的任何子类)的代码中(以编程方式)确定 B 是实现 int doSomething(int) 的类。
或者如果 B 的任何子类(假设 D 扩展 C)覆盖“int doSomething(int)”,当使用 E(扩展 D,是的......这是一大类类)时,我可以定义实现“int doSomething(int)”的第一个父级?
提前谢谢大家:)
【问题讨论】:
-
为什么你需要知道这个?你通常不应该关心这个。如果你有一个 A 的实例,你知道它可能会调用 doSomething。这就是多态性的全部意义所在。无论如何,我认为这就是你要找的东西:docs.oracle.com/javase/6/docs/api/java/lang/reflect/…
-
你的意思是在方法内部做
System.out.println(getClass().getName());之类的事情? -
@stacker 是的,应该明确编辑帖子谢谢! @ JBNizet 我(几乎)完全了解多态性的意义,并且非常了解继承的工作原理,但是在某些情况下,您希望使用比当前特定类公开和声明的方法更多的标准方法。 @ Viruzzo 比这要复杂一些,但谢谢。
标签: java inheritance object overriding introspection