См. следующий пример:
interface I {}
class A implements I {}
class B implements I {}
class Foo{
void f(A a) {}
void f(B b) {}
static public void main(String[]args ) {
I[] elements = new I[] {new A(), new B(), new B(), new A()};
Foo o = new Foo();
for (I element:elements)
o.f(element);//won't compile
}
}
Почему методы перегрузки не поддерживают преобразование вверх?
Если бы перегрузка была реализована во время выполнения, это обеспечило бы гораздо большую гибкость. Например, шаблон посетителя будет проще. Есть ли какая-то техническая причина, которая мешает Java сделать это?