【发布时间】:2015-01-19 02:26:57
【问题描述】:
两者有什么区别。
public class Test {
public static void main(String args[]) {
String toBeCast = "cast this string";
A a = toBeCast; // error - Type mismatch: cannot convert from String to A
Object object = toBeCast;
}
}
public class A {
}
当我们说每个对象都扩展 Object class 时,为什么 A a = toBeCast; 不允许,但是这个 Object object = toBeCast; 工作正常。
【问题讨论】:
-
其他方式:为什么你认为
String对象应该可以转换为A?在你的代码中,你在哪里确保 A 是 String 的超类,以便编译器知道 A 应该能够做的所有事情都被 String 覆盖了? -
不,A 是 Object 的 子类,就像 String 是 Object 的子类一样。
-
确实如此。这就是层次结构的工作方式。如果两个类在同一层次链中,则子类的实例可以安全地转换为超类的实例。在这种情况下,
A和String非常不在同一个链中。 -
转换对象引用不会改变对象的类型。事实上,它不会以任何方式改变对象。这与转换确实修改其格式和值的标量形成对比。
-
原产国有句古话,类似于“狗有腿,不成桌子”
标签: java string casting downcast upcasting