如下代码:
public class Test { public static void main (String [] args ){
String [] arr = new String [50];
Object obj = new Object();
obj = arr;
}

}我想问的是,这样为什么可以编译通过?
obj并不是个数组类型啊。

解决方案 »

  1.   

    因为 Object类是类层次结构的根类
    所有对象、数组都实现这个类的方法
      

  2.   

    obj不是数组,但arr是个对象,那样的话并不存在转型错误。
    反之如果你arr=obj;就会有问题了
      

  3.   

    Object可是所有类的父类.
    子类能够自动转换成父类类型.
      

  4.   

    噢~~~数组的每一个元素也是对象~object对象是根对象~最大的~
      

  5.   

    我想问的并不是转型不转型的问题。
    我也知道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{

    }
      

  6.   

    还有三楼的朋友
    你说的:obj不是数组,但arr是个对象,那样的话并不存在转型错误。
    反之如果你arr=obj;就会有问题了我想问题并不是 数组和对象的 的事情。
    而是上转型和下转型的问题吧?
    当然如果arr=(String [])obj也是可以编译过的。
    但是在运行时,会报ClassCastException。
    而这也并不是我提此问题的本意。
      

  7.   


    非常感谢你,麻烦帮我讲清楚可以吗?
    为什么obj=arr可以,但是f=s 却不行?
    不都是上下继承的关系吗?
      

  8.   

    另外。obj=arr 和 obj[]=arr 的区别是什么
      

  9.   

    String是一个对象                            //Object << String 
    String[]是一个对象                         //Object << String[] 
    String[][][][][][][][][][] 也是一个对象//Object << String [][][][][][][][][][]
      

  10.   

    object不是数组 是类是树形结构的顶端
      

  11.   

    建议先看一遍 java编程思想 前四章,对编码的类型定义有个清晰的认识