首页 > Java通过接口调用方法的时候,怎么知道调用的是哪个实现类里的方法?

Java通过接口调用方法的时候,怎么知道调用的是哪个实现类里的方法?

一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法?

谢谢。


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也不行。

【热门文章】
【热门文章】