不要被题目吓到啊~呵呵~~
看看下面的代码 public static void main(String[] args) {
String[] a = {};
test(a); 
}

private static void test(Object ob){
System.out.println("OB");
}

// private static void test(Object[] ob){
// System.out.println("AR");
// }当前输出:OB
打开 test(Object[] ob) 方法后呢?
谁能仔细深刻的讲讲其中奥义~~

解决方案 »

  1.   

    典型的多态啊晕死array是object啊只是Array也是继承object的呀
      

  2.   

    String不是object 吗?当然 是
      

  3.   

    public static void main(String[] args) {
    T1 t = new T2();
    t.print();
    }class T2 extends T1{
    public static void print(){
    System.out.println("T2 print");
    }
    }abstract class T1{
    public static void print(){
    System.out.println("T1 print");
    }
    }是不是和你说的一样~
      

  4.   

    String [] a 的每个元素都是对象
    而基本类型如int [] a的元素可以不叫对象其实对于重载的test,无论是 test(Object ob)还是 test(Object[] ob)
    test(a),都是把a[0]传进去,只是参数匹配的先后关系而已,有后者当然
    调用后者,没有就调用前者,可以这样分别测试:
    private static void test(Object ob){
            System.out.println(ob);  --》打印出类名@hashcode,可以看出显然是对象啦
        }
    private static void test(Object[] ob){
            System.out.println(ob);  结果同上
        }
      

  5.   

    呵呵,为了查这个问题我读了半天的JLS。从string[].getClass().getGenericParent()确实返回Object.
    但是,getGenericInterface()反回的确是java.lang.Clonable.
    这就是说String[] 还有Object[] 都是Clonable的实现。
    而重载方法时,Object是优先级最低,所以调用了Object[]为参数的方法。自己赞一个。嘿嘿。