有什么区别。
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;
工作正常。
答案 0 :(得分:3)
请记住几何类中的古老谚语 - "每个正方形都是一个矩形,但不是每个矩形都是正方形"。概括为:"每个方形/平行四边形/菱形是一个多边形,但不是每个多边形都是正方形/平行四边形/菱形"。
以下是您正在做的事情:
String toBeCast = "cast this string" //this rhombus is a rhombus: cool!
A a = toBeCast; //this parallelogram is that rhombus : WTF? that doesn't make sense!
Object object = toBeCast; //this polygon is that rhombus: cool!
答案 1 :(得分:1)
OBJECT
/ \
A String
这就是你的类层次结构的样子,这就是为什么转换为Object A
会产生错误。
答案 2 :(得分:1)
变量toBeCast是字符串struct的一个实例。 变量a是A类的实例。
可以编译以下内容:
String toBeCast = "cast this string";
Object obj = toBeCast;
这是因为,正如您所说,对象(包括字符串)的每个实例都从System.Object继承,但是以下内容将无法编译:
A a = toBeCast;
虽然(类型A)继承自System.Object并且toBeCast(类型字符串)继承自Object,但类型A不从类型字符串继承。
因此编译器返回:“类型不匹配:无法从String转换为A”。
答案 3 :(得分:0)
因为String
不是A
答案 4 :(得分:0)
在物体窗口和物体螺丝上观察。它们都是对象,但它们更像是一个对象。有更多的规格来描述这两个,所以你知道什么是窗户或螺丝。编码语言Java中的对象也是如此。 从完全不同的环境中进行类的转换是没有意义的。
String也是Final和一个不可变对象。请看一下 Why is String final in Java?