Получить доступ

Что такое перегрузка метода (overloading)?

JuniorОсновы языка
Ещё спрашивают так:
  • Чем перегрузка отличается от переопределения?
Коротко

Перегрузка (overloading) — несколько методов с одним именем и разными параметрами в одном классе; выбор на этапе компиляции по объявленным типам аргументов. Переопределение (overriding) — подкласс заменяет метод родителя с той же сигнатурой; выбор во время выполнения по реальному типу объекта.

  • Тип возвращаемого значения не участвует в перегрузке
  • При переопределении: не сужать доступ, не расширять проверяемые исключения, возвращаемый тип может быть подтипом
  • @Override — компилятор проверит, что метод действительно переопределяет

А ещё Статические методы не переопределяются, а скрываются

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Перегрузка:

void print(int x) { ... }
void print(String s) { ... }
void print(int x, int y) { ... }

Компилятор выбирает метод по объявленным типам аргументов. Порядок: точное совпадение и расширение примитивов → с упаковкой → с varargs. Отсюда ловушка list.remove(1) у List<Integer> — удаляет по индексу.

Переопределение:

class Animal { String sound() { return "..."; } }
class Cat extends Animal { @Override String sound() { return "мяу"; } }
Animal a = new Cat();
a.sound();   // "мяу" — по реальному типу

Правила: та же сигнатура; доступ не уже; проверяемых исключений не больше; возвращаемый тип — тот же или подтип (ковариантность).

перегрузкапереопределение
гдев одном классе (или наследнике)в подклассе
сигнатураразные параметрыта же
выборкомпиляциявыполнение

Что хотят услышать

  • Определения и время выбора.
  • Правила переопределения.

Частые ошибки

  • Считать, что перегрузку можно сделать только разным return type.
  • Путать overloading и overriding.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Несколько методов с одним именем, но разными параметрами
  • ✗Замена реализации метода родителя в подклассе
  • ✗Запрет вызова метода из другого пакета
  • ✗Автоматический выбор конструктора JVM после выполнения

Что спросят дальше

  • Что входит в сигнатуру метода?
  • Как varargs влияет на выбор перегрузки?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем