-2

我即将参加一场考试,我正在学习..我正在考虑一种优雅的方式来回答以下问题,我目前的答案将类似于(基于stackoverflow上这个答案的信息)

上面的初始化是不可能的,它会编译但在声明中缺少一个标识符,并且其他函数如添加、删除将不可用。

问题..

考虑以下代码片段。是否可以将 ArrayList 的实例分配给在第 1 行中声明为 Object 的变量?解释。

  Object strings = new ArrayList();

  strings.toString();

还有什么其他方法可以回答这个问题?您能否提供维基百科/资源,以便我可以进一步研究编译器如何将其转换为字节码?谢谢

4

2 回答 2

2

考虑以下代码片段。是否可以将 ArrayList 的实例分配给在第 1 行中声明为 Object 的变量?解释。

   Object strings = new ArrayList();

   strings.toString();

是的,有可能。 Object是一种超类型ArrayList(实际上,Object 是所有Java 引用类型的超类型)。将变量声明为实际分配的类型的超类型是合法的。

当您List使用 的具体实现定义 a 时,会发生类似的情况ArrayList

  List<String> list = new ArrayList<String>();
于 2012-06-05T03:41:39.843 回答
1

它确实可以编译(你试过了吗?)但生成的 ArrayList 很难使用,因为它被声明为一个对象。例如,该行:

strings.add("hello");

不会编译,因为 add() 没有为 Object 类型定义。然而,

((List)strings).add("hello");

编译。

于 2012-06-05T03:43:13.060 回答