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

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

谢谢。

2014-07-02 更新

前三个回答是

可以

,不过依然没有找到我想要的答案。比如在

Eclipse

里查看别人的

jar包里的源码

,对于接口调用方法情况,如果直接按ctrl点进去查看源码,往往只能看到接口里方法的声明,无法获知具体调用的是哪个实现类的方法,特别是实现类非常多的情况,虽然这是Java多态的体现,但,有没有工具可以在

非调试状

态下知道调用是哪个实现类里的方法?

用对象的

getClass()

方法获得它的类,之后就可以随意去判断这是哪个实现类了。

多态是运行时的概念,在运行前是不可能知道究竟会使用哪个实现的。你能做的只是找到所有实现这个 interface 的类然后从逻辑上猜测大概会是哪个。

也可以使用instanceof判断

反射 or 把所有类都创建单个实例用hashmap存储

理论上可以,可用reflection等办法。

但据我所知,eclipse不支持你想要的功能。

原因是多态的特性使得对象的真实类型只能到运行时(runtime)才能被JVM确定。而eclipse的绝大多数refactoring和declaration jumping都是基于semantics的,也就是只能依靠在编译时(compile time)所能获得的信息。因此编译时获取的信息有有时只能推断到接口或者父类,这样就无法在编译时确定真实类型。eclipse对此无能为力,intelliJ也不行。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值