javamPokaze || Java Battle || Overload vs @Override
🛠️

javamPokaze || Java Battle || Overload vs @Override

notion image

No siema!


Rozpoczynamy nowy cykl krótkich rzeczowych artykułów, który nazwałem Java Battle. Co jakiś czas będziemy zgłębiać i analizawać różne elementy i funkcjonalności języka Java, porównanywać ich zastosowania oraz najlepsze praktyki. W tej inauguracyjnej rundzie Java Battle skupimy się na dwóch ważnych koncepcjach: przeciążaniu (overload) i przesłanianiu (override).
Przeciążanie i przesłanianie to dwa kluczowe mechanizmy języka Java, które pozwalają nam na elastyczne dostosowywanie kodu do naszych potrzeb. Chociaż mogą się wydawać podobne, istnieją pewne różnice, których warto być świadomym, aby pisać czytelny i efektywny kod.
Jesteście ciekawi, jak wygląda pojedynek między overload, a override? W takim razie przygotujcie się na 1 rundę wagi piórkowej Java Battle. Zaczynamy!
notion image

Overload (przeładowanie)


  • Przeciążanie metod polega na tworzeniu wielu metod o tej samej nazwie, ale różniących się listą parametrów
  • Metody przeciążone w języku Java mogą różnić się listą parametrów pod względem typów parametrów, liczby parametrów lub obu tych czynników jednocześnie. Oznacza to, że możemy tworzyć wiele metod o tej samej nazwie, ale z różnymi zestawami parametrów
  • Typ zwracany metody nie jest uwzględniany w procesie rozróżniania przeciążonych metod. Metody przeciążone mogą mieć ten sam typ zwracany lub różne typy zwracane
  • Kiedy wywołujesz metodę, Java nie rozróżnia ich na podstawie nazwy, ale na podstawie przekazanych argumentów (po ich ilości i typach)
  • Przeładowanie metody pozwala na dostosowanie funkcjonalności metody, w zależności od różnych scenariuszy użycia
public class firstCalculator{ public int add(int a, int b){ return a + b; } public class secondCalculator extends firstCalculator{ public double add(double a, double b){ return a + b; } public class thirdCalculator extends firstCalculator{ public int add(int a, int b, int c){ return a + b + c; } }
W tym przykładzie klasa firstCalculator zawiera metodę o nazwie add, która zwraca wynik dodawania dwóch liczb całkowitych. W klasie secondCalculator w metodzie o tej samej nazwie znajdują się inne parametry (double) typ zwracany (double). Oznacza, to wykonaliśmy overload , a więc nastąpiła zmiana funkcjonalności metody poprzez zmianę typów parametrów (a przy okazji typu zwracanego metody). Również w klasie thirdCalculator wykonaliśmy przeciążenie, ponieważ dodaliśmy dodatkowy parametr int c, ale już bez zmiany typu zwracanego metody. Jedyna sytuacja, w której należy zmienić typ zwracany metody to taka, w której jednocześnie zmieniamy typy parametrów (tak zrobiliśmy w secondCalculator ).
 
notion image

Override (przesłonięcie)


  • Przesłonięcie odnosi się do sytuacji, w której klasa dziedzicząca implementuje metodę o takiej samej nazwie i strukturze jak metoda z klasy nadrzędnej (klasy bazowej)
  • W przesłonięciu chodzi głównie o możliwość zmiany funkcji, jakie sprawuje metoda, czyli zmiany w jej ciele (kodzie wewnętrznym)
  • Nazwa metody, jej typ zwracany oraz ilość i typy parametrów muszą być takie same jak w metodzie, którą zamierzasz przesłonić
  • Przesłanianie pozwala na zmianę implementacji metody w klasie podrzędnej. Aby jawnie zadeklarować, że metoda jest przesłonięciem należy użyć adnotacji @Override , jednak nie jest to konieczne
public class Animal { public void makeSound() { System.out.println("Animal is making a sound"); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog is barking"); } }
W tym przykładzie klasa Dog dziedziczy po klasie Animal i przesłania metodę makeSound(), aby dostosować zachowanie dla psa. Podczas wywoływania makeSound() na obiekcie typu Dog, zostanie wywołana przesłonięta implementacja z klasy Dog, a nie implementacja z klasy Animal (Piesek pięknie zaszczeka).
 
notion image
W dużym skrócie, overload (przeładowanie) dotyczy tworzenia wielu metod o tej samej nazwie, ale o różnych zestawach parametrów, podczas gdy override (przesłonięcie) odnosi się do zmiany implementacji metody oraz jej funkcjonalności bez zmiany parametrów oraz typu zwracanego.

Śledź mnie na LinkedIn


Newsletter


👋
Jeśli masz jakieś sugestie lub pytania, proszę napisz do mnie wiadomość: kuba@javampokaze.pl