Вопрос с собеседования · Java

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

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

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

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

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

Подробно

Перегрузка:

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

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

Разбор собеседования