Ответ
Сигнатура метода (method signature) — это уникальный идентификатор метода в пределах одного класса. По сигнатуре компилятор и JVM отличают один метод от другого. Она используется для разрешения перегрузки методов (overloading).
Сигнатура метода состоит из:
- Имя метода.
- Список типов параметров (в строгом порядке).
Что НЕ входит в сигнатуру метода:
- Возвращаемый тип.
- Модификаторы доступа (
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) вызвать?
Полное объявление метода = Сигнатура + Возвращаемый тип + Модификаторы + Исключения.