Подтвердить что ты не робот

В чем разница между множественной пересылкой и перегрузкой метода?

В таких языках, как Scala, можно задать несколько определений для одного имени метода, изменив количество параметров и/или тип параметров метода. Это называется перегрузкой метода.

Как это отличается от множественной отправки?

Спасибо

4b9b3361

Ответ 1

Перегрузка метода разрешена во время компиляции.

Многократная отправка разрешена во время выполнения.

При использовании двойной отправки вызываемый метод зависит от фактического типа приемника и аргументов. Однако перегрузка метода, однако, позволяет только вызываемому методу быть в зависимости от объявленного типа параметров. Зачем? Java связывает вызовы методов во время компиляции с их полной подписью (раннее связывание). Полная подпись включает все типы параметров, поэтому, когда фактический тип аргумента отличается во время выполнения (полиморфизм), перегрузка не работает так, как вы могли ожидать!

void add(Foo o) { ... }
void add(Bar o) { ... }
void client() {
    Foo o = new Bar();
    add(o); // calls add(Foo) not add(Bar)!
}

используя несколько диспетчеров, однако

void add(Foo o) { o.dispatch(this); }
void add(Bar o) { o.dispatch(this); }
void client() {
    Foo o = new Bar();
    add(o); // calls #dispatch as defined in Bar!
}

В Scala ситуация может немного отличаться, хотя общее различие должно быть таким же, как представлено здесь на всех языках программирования.