字符串到对象类型转换 - 差异

时间:2014-11-21 01:56:16

标签: java string casting downcast upcasting

有什么区别。

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;工作正常。

5 个答案:

答案 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?