我正在考试,我正在考试......我正在考虑一种优雅的方式来回答以下问题,我目前的答案是类似的(基于此answer的信息计算器)
上面的初始化是不可能的,它会编译但在声明中缺少一个标识符,而其他函数如add,remove将不可用。
问题..
请考虑以下代码段。是否可以将ArrayList的实例分配给声明为Object的变量,如第1行所做的那样?解释
Object strings = new ArrayList();
strings.toString();
有什么其他方法可以解答这个问题?你能否提供维基百科/资源,所以我可以进一步研究编译器如何将其转换为字节码?谢谢
答案 0 :(得分:2)
请考虑以下代码段。是否可以将ArrayList的实例分配给声明为Object的变量,如第1行所做的那样?解释强>
Object strings = new ArrayList();
strings.toString();
是的,这是可能的。 Object
是ArrayList
的超类型(实际上,Object是所有Java引用类型的超类型)。将变量声明为指定的实际类型的超类型是合法的。
使用List
的具体实现定义ArrayList
时会出现类似情况:
List<String> list = new ArrayList<String>();
答案 1 :(得分:1)
它确实编译(你试过吗?)但是生成的ArrayList很难使用,因为它被声明为Object。例如,行:
strings.add("hello");
将无法编译,因为对于Object类型,未定义add()。然而,
((List)strings).add("hello");
编译。