A a = new A(); a.method(); 和 IA a = new A(); a.method();两者在jvm里运行时有何区别

zhanglidavid 2009-05-19 10:32:38
难道是在方法的寻址过程,性能上?
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luopowusheng 2009-05-19
  • 打赏
  • 举报
回复
多态是编译时概念
在jvm里运行两者没有区别
zhanglidavid 2009-05-19
  • 打赏
  • 举报
回复
差不多吧,和动态绑定有关系
knightzhuwei 2009-05-19
  • 打赏
  • 举报
回复
莫非你在问多态在jvm里是如何实现的?
lixj2009 2009-05-19
  • 打赏
  • 举报
回复
没有区别的,
A a = new A(); a.method(); 和 IA a = new A(); a.method();
只是在左边是编译时类型----编译器认为a是什么类型,右边是运行时类型,是JVM认为的
yangmeansyoung 2009-05-19
  • 打赏
  • 举报
回复
个人理解的是这样,第一种情况因为引用本身类型就是对象的类型,编译时就已经确定了会调用的方法是A类中的方法。
第二种情况,父类引用指向子类对象,形成多态,编译时只对方法可见性进行检查,在运行到a.method()时,会通过a这个引用去找堆上对象具体类型,并调用对象中包含的method()方法。
这个完全是不服这不完整不权威,个人理解,仅供参考。期待高人出现。
zhanglidavid 2009-05-19
  • 打赏
  • 举报
回复
对,IA是A的接口,开始忘了说了。。。。
你能从java虚拟机的角度给我讲讲吗,谢谢
yangmeansyoung 2009-05-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luopowusheng 的回复:]
多态是编译时概念
在jvm里运行两者没有区别
[/Quote]

咕~~(╯﹏╰)b 貌似多态应该是运行时的概念吧。父类引用指向子类对象,在调用方法那时才会决定具体是调那个类的方法。。。编译时都决定了,还怎么“多”,不是就卡死了。。。

然后楼主第二句 IA 这个类型是 A 的父类吗?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧