В программе мы можем использовать методы с одним и тем же именем, но с разными типами и/или количеством параметров. Такой механизм называется перегрузкой методов (method overloading).
Например:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
System.out.println(calc.sum(2, 3)); // 5
System.out.println(calc.sum(4.5, 3.2)); // 7.7
System.out.println(calc.sum(4, 3, 7)); // 14
}
}
class Calcualtor{
int sum(int x, int y){
return x + y;
}
double sum(double x, double y){
return x + y;
}
int sum(int x, int y, int z){
return x + y + z;
}
}
Здесь определен класс Calculator с тремя вариантами или тремя перегрузками метода sum(), но при его вызове в зависимости от типа и количества передаваемых
параметров система выберет именно ту версию, которая наиболее подходит.
Стоит отметить, что на перегрузку методов влияют количество и типы параметров. Однако различие в типе возвращаемого значения для перегрузки не имеют никакого значения. Например, в следующем случае методы sum различаются по типу возвращаемого значения:
class Program{
public static void main(String[] args) {
Calcualtor calc = new Calcualtor();
System.out.println(calc.sum(2, 3));
}
}
class Calcualtor{
int sum(int x, int y){
return x + y;
}
// Ошибка - метод sum уже определен
double sum(int x, int y){
return x + y;
}
}
Однако перегрузкой это не будет считаться. Более того такая программа некорректна и попросту не скомилируется, так как метод с одним и тем же количеством и типом параметров определен несколько раз.