一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法?
谢谢。
2014-07-02 更新
前三个回答是可以
,不过依然没有找到我想要的答案。比如在Eclipse
里查看别人的jar包里的源码
,对于接口调用方法情况,如果直接按ctrl点进去查看源码,往往只能看到接口里方法的声明,无法获知具体调用的是哪个实现类的方法,特别是实现类非常多的情况,虽然这是Java多态的体现,但,有没有工具可以在非调试状
态下知道调用是哪个实现类里的方法?
用对象的 getClass()
方法获得它的类,之后就可以随意去判断这是哪个实现类了。
多态是运行时的概念,在运行前是不可能知道究竟会使用哪个实现的。你能做的只是找到所有实现这个 interface 的类然后从逻辑上猜测大概会是哪个。
反射 or 把所有类都创建单个实例用hashmap存储
也可以使用instanceof判断
理论上可以,可用reflection等办法。
但据我所知,eclipse不支持你想要的功能。
原因是多态的特性使得对象的真实类型只能到运行时(runtime)才能被JVM确定。而eclipse的绝大多数refactoring和declaration jumping都是基于semantics的,也就是只能依靠在编译时(compile time)所能获得的信息。因此编译时获取的信息有有时只能推断到接口或者父类,这样就无法在编译时确定真实类型。eclipse对此无能为力,intelliJ也不行。