Почему нельзя реализовать перегрузку во время выполнения?

См. следующий пример:

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 сделать это?

8
задан Don Li 24 May 2012 в 07:05
поделиться