【发布时间】:2012-05-19 19:55:18
【问题描述】:
我的情况是有一个带有方法 m 的接口 I,以及行为不同的两个实现类 A 和 B。
A 和 B 的对象仅将内存用于它们的值和引用类型,而不是用于它们的方法。存储在类型 I 变量中的 A 对象与引用(指针大小开销)加上对象大小一起存储。现在调用方法 m。现在这一位信息存储在哪里,必须从 B 类调用 A 类的方法 m?
这个问题也让我对 C++ 虚拟方法感到厌烦。
interface I { void m(); }
class A implements I { void m(){println("a");} }
class B implements I { void m(){println("b");} }
【问题讨论】:
-
谁说“A 和 B 的对象仅将内存用于其值和引用类型,而不用于其方法”?这是一个相当大胆的断言(而且可能是错误的)。
-
可能是真的,这个假设可能是错误的,这正是我问这个问题的原因。但是我的 visualVM 分析告诉我,只使用了值类型和引用的空间,而不是方法。但我不确定我能多认真地接受这些测试,因为我不知道还有哪些优化。
标签: c++ jvm polymorphism virtual