您实际上是在问有关变量声明的问题,
fruit而不是对象的实际运行时类型(
Apple在这种情况下为)。
我认为这通常是一个坏主意:您只是声明了变量,并告诉编译器它为a
Fruit,那么为什么现在需要找出这个变量?
只是要使事情更加混乱,值得注意的是,您还可以具有多个具有不同声明类型的变量来引用同一对象(仍然是Apple):
Fruit fruit = new Apple(); // fruit declared as Fruit, but refers to an AppleObject thing = fruit; // thing declared as Object, refers to the same Apple
如果您真的想找出已声明的类型,则可以选择以下几种方法:
- 创建
fruit
一个实例变量,并使用反射查询声明的类型。 - 对源代码进行一些处理以找到变量声明
- 对已编译的字节码进行一些处理以找到声明类型(尽管有可能激进的编译器甚至可以完全优化编译时间声明,例如,在意识到该代码中的结果只能是苹果之后)
我认为所有这些都很难看,所以我的一般建议是“不要这样做”。



