首先java.lang.Object是顶级的类java.lang.String和java.lang.StringBuffer都是Object的子类而且String和StringBuffer是同级的

解决方案 »

  1.   

    null可是任意对象类型的,所以JVM可以认为它是String类型的,也可以是StringBuffer类型的,这时就产生了二义性错误!
      

  2.   

    在重载方法中参数有可能混淆的情况下,编译器使用下面的策略:
    1. 如果发生混淆的位置上的所有参数类型在继承关系上构成一棵有分支的树,报错。
    2. 如果这些参数类型在继承关系上是一个队列,匹配类体系中最低级的那个。程序:
    public class InheritanceTest
    {
    public class C_1 extends Object {}

    public class C_1_1 extends C_1 {}
    public class C_1_2 extends C_1 {}

    public class C_1_1_1 extends C_1_1 {}
    public class C_1_1_2 extends C_1_1 {}
    public class C_1_2_1 extends C_1_2 {}

    public void pr( C_1 c )
    {
    System.out.println( "C_1" );
    }

    public void pr( C_1_1 c )
    {
    System.out.println( "C_1_1" );
    } public void pr( C_1_1_1 c )
    {
    System.out.println( "C_1_1_1" );
    } //报错
    public void pr( C_1_2_1 c )
    {
    System.out.println( "C_1_2_1" );
    }

    public static void main( String args[] )
    {
    InheritanceTest t = new InheritanceTest();
    t.pr( null );
    }
    }