Przeciążanie metod polega na zdefiniowaniu w tej samej klasie kilku metod o tej samej nazwie, ale z różnymi listami parametrów. Różnice mogą dotyczyć:
- liczby parametrów,
- typów parametrów,
- kolejności typów parametrów.
W językach takich jak C# lub Java kompilator wybiera odpowiednią wersję metody na podstawie argumentów przekazanych podczas wywołania.
Przykład w C
public class Point
{
public void Move(int x, int y) { }
public void Move(int x, int y, int z) { }
public void Move(Point newPt) { }
}
Wszystkie trzy metody mają nazwę Move, ale różnią się parametrami. Oznacza to, że są przeciążone.
Przykładowe wywołania:
Point p = new Point();
p.Move(10, 20); // wywołuje Move(int x, int y)
p.Move(10, 20, 30); // wywołuje Move(int x, int y, int z)
p.Move(new Point()); // wywołuje Move(Point newPt)
Czego nie należy mylić?
Przeciążanie metod nie oznacza przeciążania operatorów. Przeciążanie operatorów dotyczy symboli takich jak +, -, ==.
Nie są to też konstruktory, ponieważ konstruktor musi mieć nazwę taką samą jak klasa i nie ma typu zwracanego. W przykładzie metody nazywają się Move, a klasa Point.
Ważna zasada
Sam typ zwracany nie wystarcza do przeciążenia metody. Metody muszą różnić się listą parametrów, np. liczbą lub typem argumentów.