Junior
Co lze změnit při přetížení metod v programování?
sobes.tech AI
Odpověď od AI
Při přetížení metod (method overloading) je možné změnit:
- Počet parametrů: Metody se stejným jménem mohou mít různý počet formálních parametrů.
- Typy parametrů: Metody se stejným jménem a stejným počtem parametrů se mohou lišit typy těchto parametrů.
- Pořadí typů parametrů: Pokud mají metody stejný počet parametrů a stejné typy, ale jsou uspořádány v jiném pořadí, je to také považováno za přetížení.
Příklad v jazyce Java:
// Třída s přetíženými metodami
class Calculator {
// Metoda sčítání dvou celých čísel
public int add(int a, int b) {
return a + b;
}
// Přetížená metoda: sčítání tří celých čísel
public int add(int a, int b, int c) {
return a + b + c;
}
// Přetížená metoda: sčítání dvou desetinných čísel
public double add(double a, double b) {
return a + b;
}
// Přetížená metoda: sčítání celého a desetinného čísla
public double add(int a, double b) {
return a + b;
}
// Přetížená metoda: sčítání desetinného a celého čísla
public double add(double a, int b) {
return a + b;
}
}
Co nelze při přetížení změnit:
- Typ návratové hodnoty: Dvě metody se stejným jménem a stejnou signaturou (počet, typy a pořadí parametrů) se mohou lišit pouze typem návratové hodnoty.
- Modifikátory přístupu: Modifikátory přístupu (public, private, protected, default) neovlivňují přetížení.
- Přítomnost nebo absence klíčového slova
static: Nelze přetížit statickou metodu tím, že se definuje nestatická metoda se stejnou signaturou, nebo naopak. - Seznam výjimek: Seznam výjimek není součástí signatury metody a při přetížení se nezohledňuje.
Porovnání přetížení a přepisování metod:
| Vlastnost | Přetížení (Overloading) | Přepisování (Overriding) |
|---|---|---|
| Kde dochází | V jedné třídě nebo v hierarchii tříd | V odvozené třídě |
| Název metody | Stejný | Stejný |
| Signatura metody | Odlišná (počet, typy, pořadí parametrů) | Stejná |
| Typ návratové hodnoty | Může být odlišný (ale není to jediný rozdíl) | Musí být stejný nebo kovariánský (pro objekty) |
| Cíl | Poskytnout různé varianty jednoho činu pro různé datové typy nebo počet argumentů | Změnit chování zděděné metody v odvozené třídě |
| Vztah mezi metodami | Nezávislé metody | Vztah "je" (dědičnost) |
| Polymorfismus | Polymorfismus v době kompilace (statický) | Polymorfismus v době běhu (dynamický) |