1

有什么区别。

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;很好用。

4

5 回答 5

4

记住几何课上的那句老话——“每个正方形都是矩形,但不是每个矩形都是正方形”。将其概括为:“每个正方形/平行四边形/菱形都是多边形,但并非每个多边形都是正方形/平行四边形/菱形”。

这就是你正在做的事情:

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! 
于 2014-11-21T02:08:28.943 回答
1

变量 toBeCast 是字符串结构的一个实例。变量 a 是类 A 的一个实例。

它可以编译以下内容:

String toBeCast = "cast this string";
Object obj = toBeCast;

这是因为,正如您所说,对象的每个实例(包括字符串)都继承自 System.Object,但是以下内容将无法编译:

A a = toBeCast;

虽然 a (Type A) 继承自 System.Object 并且 toBeCast (Type String) 继承自 Object,但 Type A 不继承自 Type String。

因此编译器返回:“类型不匹配:无法从字符串转换为 A”。

于 2014-11-21T02:10:15.323 回答
1
  OBJECT
  /    \
  A    String

这就是您的类层次结构的样子,这就是为什么强制转换Object A会出错。

于 2014-11-21T02:03:10.337 回答
0

查看对象窗口和对象螺钉。它们都是对象,但它们更像是一个对象。有更多的规格来描述两者,所以你知道什么是窗户或螺丝。Java 编码语言中的对象也是如此。从完全不同的环境中铸造类是没有意义的。

String 也是 Final 和不可变的对象。请看一下 为什么 String 在 Java 中是 final 的?

于 2014-11-21T02:35:53.340 回答
0

因为String不是的子类A

于 2014-11-21T01:58:31.710 回答