在重载方法中参数有可能混淆的情况下,编译器使用下面的策略: 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 ); } }
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 );
}
}