前段时间读一些代码,其中包含了若干复杂的implemens和extends关系,竟然在调用时出现了the method *** is ambiguous for the type *** . 一直觉得java中没有多继承,正常的多态怎么会形成这种问题。请看下面的场景:java
public class AmbiguousExpector {
class A {
}
class B extends A implements IC{
}
interface IC {}
void test(A a){}
void test(IC b){}
void ambiguous(){
B b = new B();
test(b);
}继承
}编译
上述代码没法编译,
The method test(AmbiguousExpector.A) is ambiguous for the type AmbiguousExpector AmbiguousExpector.java class
line 20 Java Problem。test
缘由:变量
B extends A的同时implements IC,可是在Class AmbiguousExpector 中的test方法签名中,接受参数为A 或者 IC,不幸的是变量b此时既知足test(A a),又知足Test(IC b),因此产生了ambiguous的错误。扩展
能够尝试注释掉任意一个test方法,编译均可以经过。或者增长test(B b).方法
上述错误当使用generic的时候能够扩展以下:im
public class AmbiguousExpector {
class A {
}
class B extends A implements IC{
}
interface IC {}
<T extends A> void test(T a){}
<V extends IC>void test(V b){}
// void test(A a){}
// void test(IC b){}
void ambiguous(){
B a = new B();
test(a);
}注释
}
结果同样。