Przeciążanie Przeciążanie (lub przeładowywanie, ang. overloading) pozwala nazwać tak samo kilka podprogramów operujących na różnych danych i następnie obsługiwać te dane w jednolity sposób. Np. inaczej dodawane są liczby całkowite, a inaczej zmiennopozycyjne, ale wygodnie obie te operacje nazywać po prostu dodawaniem i oznaczać symbolem „+”. W językach bez przeciążania operatory te muszą się różnić (np. w OCamlu są oddzielne operatory „+” i „+.”). Przeciążane mogą być np. operatory, funkcje, metody, procedury. W niektórych językach niektóre operatory lub funkcje są przeciążone, ale programista nie może ich dodatkowo dociążać lub przeciążać własnych.
Wybór konkretnego podprogramu następuje w miejscu wywołania na podstawie jego nazwy oraz statycznych typów argumentów, a czasami również na podstawie typu oczekiwanej wartości zwracanej (np. w Adzie). Jest to więc polimorfizm statyczny.
Multimetody Mechanizmem podobnym do przeciążania, ale opierającym wybór na dynamicznym, a nie statycznym, typie argumentów, są multimetody (ang. multimethods lub multiple dispatch). Metody takie można traktować jak metody wirtualne, ale należące do kilku różnych klas. Mechanizm ten nie jest zbyt popularny, spotkać go można w języku CLOS.