Перегрузка методов (Method Overloading) — это возможность в Java определять несколько методов с одинаковым именем, но с разными параметрами (разным количеством или типами параметров). Это позволяет использовать одно и то же имя метода для выполнения различных операций в зависимости от переданных аргументов.
public
, private
) и другие модификаторы (например, static
, final
) не влияют на возможность перегрузки.Рассмотрим пример класса Calculator
, в котором перегружены методы add
для выполнения сложения с разными типами и количеством параметров.
class Calculator {
// Перегруженный метод для сложения двух целых чисел
public int add(int a, int b) {
return a + b;
}
// Перегруженный метод для сложения трех целых чисел
public int add(int a, int b, int c) {
return a + b + c;
}
// Перегруженный метод для сложения двух чисел с плавающей точкой
public double add(double a, double b) {
return a + b;
}
// Перегруженный метод для сложения строк (конкатенация)
public String add(String a, String b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(2, 3)); // Вызов метода add(int, int)
System.out.println(calc.add(2, 3, 5)); // Вызов метода add(int, int, int)
System.out.println(calc.add(2.5, 3.7)); // Вызов метода add(double, double)
System.out.println(calc.add("Hello, ", "World!")); // Вызов метода add(String, String)
}
}
add(int a, int b)
: Метод для сложения двух целых чисел.add(int a, int b, int c)
: Метод для сложения трех целых чисел.add(double a, double b)
: Метод для сложения двух чисел с плавающей точкой.add(String a, String b)
: Метод для конкатенации двух строк.Компилятор определяет, какой из перегруженных методов вызвать, на основе переданных аргументов. Это называется разрешением перегрузки (Overload Resolution).
Типы параметров: Перегрузка методов работает только на основе типов и количества параметров. Возвращаемый тип не учитывается.
// Ошибка компиляции: методы с одинаковыми параметрами, но разными возвращаемыми типами
public int add(int a, int b) { return a + b; }
public double add(int a, int b) { return a + b; } // Ошибка!
Автоматическое приведение типов: Если точного совпадения типов параметров нет, компилятор попытается выполнить автоматическое приведение типов (например, int
к double
).
System.out.println(calc.add(2, 3.5)); // Вызов метода add(double, double)
Varargs (переменное количество аргументов): Методы с переменным количеством аргументов (varargs
) также могут быть перегружены.
public int add(int... numbers) {
int sum = 0;
for (int num : numbers) {
sum += num;
}
return sum;
}
Использование перегрузки методов делает код более удобным и понятным, особенно в случаях, когда методы выполняют схожие задачи, но с разными входными данными.