Что такое сигнатура метода в Java?

«Что такое сигнатура метода в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сигнатура метода (method signature) — это уникальный идентификатор метода в пределах одного класса. По сигнатуре компилятор и JVM отличают один метод от другого. Она используется для разрешения перегрузки методов (overloading).

Сигнатура метода состоит из:

  1. Имя метода.
  2. Список типов параметров (в строгом порядке).

Что НЕ входит в сигнатуру метода:

  • Возвращаемый тип.
  • Модификаторы доступа (public, private).
  • Модификаторы (abstract, final, static, synchronized).
  • Список бросаемых исключений (throws).
  • Имена параметров.

Пример:

public class Calculator {
    // Сигнатура: add(int, int)
    public int add(int a, int b) { return a + b; }

    // Сигнатура: add(double, double) — ДРУГАЯ сигнатура, перегрузка возможна.
    public double add(double x, double y) { return x + y; }

    // Сигнатура: add(int, int) — Такая же, как у первого метода!
    // КОМПИЛЯЦИОННАЯ ОШИБКА: метод уже определен.
    // public long add(int num1, int num2) { return num1 + num2; }

    // Сигнатура: configure(String, int)
    private void configure(String name, int timeout) { /* ... */ }
}

Почему возвращаемый тип не входит? Компилятор определяет, какой метод вызвать, на основе контекста вызова (имя + типы аргументов). Возвращаемое значение не участвует в этом анализе, иначе возникла бы неоднозначность.

// Если бы возвращаемый тип входил в сигнатуру, этот код был бы неоднозначным:
int result = obj.calculate(5);
String text = obj.calculate(5); // Какой из двух calculate(int) вызвать?

Полное объявление метода = Сигнатура + Возвращаемый тип + Модификаторы + Исключения.