【发布时间】:2013-11-22 14:27:38
【问题描述】:
为我的 OCA Java SE 7 程序员 I 考试而学习,所以新手问题。我有一个我不明白的示例问题。以下代码可以编译,但在运行时会产生 ClassCastException:
interface Roamable {
}
class Phone {
}
public class Tablet extends Phone implements Roamable {
public static void main(String... args) {
Roamable var = (Roamable) new Phone();
}
}
当我将 Roamable var = (Roamable) new Phone(); 更改为 Roamable var = (Roamable) new String(); 时,我立即收到编译错误。
两个问题:
- 为什么上面的代码完全可以编译?电话对我来说似乎与可漫游无关?
- 为什么代码用
new Phone()编译,用new String()编译不行?
【问题讨论】:
-
编译器知道String是
final,因此String的子类不可能是可漫游的。 -
这是一个很好的问题,让我很长时间没有头绪:)
标签: java inheritance casting classcastexception