Search
Zdánlivě podobné, avšak zcela rozdílné koncepty, které si nesmíte plést.
Přetížení (angl. overloading) je případ, kdy jedna třída obsahuje více metod se stejným jménem, ale různou signaturou. Příklad:
class Printer { public void print(String string) { System.out.println(string); } public void print(int integer) { System.out.println(integer); } }
Třída obsahuje dvě metody. Obě se jmenují print, nicméně jedna z nich bere argument typu String a druhá argument typu int. O metodě print řekneme, že je přetížená. Ve cvičení jsme se s přetížením setkali na samém závěru u třídy BasicService, která měla 3 varianty metody accept.
print
String
int
BasicService
accept
Přepsání (angl. overriding) je případ, kdy třída A má nějakou metodu a třída B, která je potomkem třídy A, definuje vlastní implementaci této metody, neboli ji přepisuje. Při volání takové metody na objektu deklarovaného jako typ A se až v momentě volání zvolí, zda-li se volá metoda třídy A (pokud objekt je skutečně typu A), nebo metoda třídy B (pokud objekt je skutečně typu B). Příklad:
class Printer { public void print(String string) { System.out.println(string); } } class VerbosePrinter extends Printer { @Override public void print(String string) { System.out.println("I am now printing the following string: \"" + string + "\""); } }
Třídou “A” je zde třída Printer, třídou “B” je zde třída VerbosePrinter, přepisovanou (a jedinou) metodou je zde metoda print.
Printer
VerbosePrinter