如下代码:
public class Test { public static void main (String [] args ){
String [] arr = new String [50];
Object obj = new Object();
obj = arr;
}
}我想问的是,这样为什么可以编译通过?
obj并不是个数组类型啊。
public class Test { public static void main (String [] args ){
String [] arr = new String [50];
Object obj = new Object();
obj = arr;
}
}我想问的是,这样为什么可以编译通过?
obj并不是个数组类型啊。
所有对象、数组都实现这个类的方法
反之如果你arr=obj;就会有问题了
子类能够自动转换成父类类型.
我也知道object是所有class的superclass。但是,现在是object并不是object[]啊。下面的代码,Father类和Son类的关系(如同Object 与 String 的关系吧?)
package Test;public class Son extends Father{ public static void main (String [] args ){
Son [] s = new Son[50];
Father f = new Father();
f = s;
}
}class Father{
}错误行:f = s;必须改成数组对象。package Test;public class Son extends Father{ public static void main (String [] args ){
Son [] s = new Son[50];
Father [] f = new Father[50];
f = s;
}
}class Father{
}
你说的:obj不是数组,但arr是个对象,那样的话并不存在转型错误。
反之如果你arr=obj;就会有问题了我想问题并不是 数组和对象的 的事情。
而是上转型和下转型的问题吧?
当然如果arr=(String [])obj也是可以编译过的。
但是在运行时,会报ClassCastException。
而这也并不是我提此问题的本意。
非常感谢你,麻烦帮我讲清楚可以吗?
为什么obj=arr可以,但是f=s 却不行?
不都是上下继承的关系吗?
String[]是一个对象 //Object << String[]
String[][][][][][][][][][] 也是一个对象//Object << String [][][][][][][][][][]