Warning
This page is located in archive.

Přetížení vs přepsání (overloading vs overriding)

Zdánlivě podobné, avšak zcela rozdílné koncepty, které si nesmíte plést.

Přetížení

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.

Přepsání

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.

courses/b0b36pjv/tutorials/04/overloading.txt · Last modified: 2021/03/03 11:15 by seredlad