【发布时间】:2011-04-23 04:54:43
【问题描述】:
假设我有以下设置
class A {
B foo();
}
class C extends B {
}
// later
A a = new A();
C theFoo = (C)a.foo();
我们知道a.foo() 返回类型 B。
当我做(C)a.foo()时,是吗
- 将
a转换为C,然后尝试调用foo()? - 在
a上调用foo()并将结果转换为C类型?
我发现很难确定,并且总是谨慎地使用额外的括号(这不是一个坏主意,为了可读性,但现在我很好奇)
这是对ObjectInputStream.readObject() 的具体引用,尽管我看不出这会如何改变行为。
【问题讨论】:
-
一种快速找出方法是在 C.foo 和 B.foo 中设置断点并进行调试。那么无论哪个被击中都会回答你的问题。顺便问下好问题
-
嗯,不知道 Eclipse 是否会让我在 Java 核心类中设置断点... :-)
-
您可以在自己引用的库上执行此操作,因此我认为核心库的反应相同。只要您附加了源代码,它就可以让您设置断点(尚未测试它们是否真正触发)