
Czym różni się przeciążanie od przysłaniania metod?
Przeciążanie metody polega na stworzeniu wielu metod o tej samej nazwie, lecz przyjmującymi inne parametry. Taki mechanizm pozwala użytkownikowi użycie tej metody, która mu odpowiada – np. ma obiekt danego typu i nie chce go samodzielnie zmieniać.
Takim przykładem może być parametr URL oraz String – zależnie od tego czym dysponujemy możemy podać metodzie inny typ.
package org.blog; import com.sun.deploy.net.BasicHttpRequest; import com.sun.deploy.net.HttpRequest; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; public class Main { public void makeRequest(HttpRequest httpRequest, URL url) { try { httpRequest.doGetRequest(url); } catch (IOException e) { e.printStackTrace(); } } public void makeRequest(HttpRequest httpRequest, String url) { try { makeRequest(httpRequest, new URL(url)); } catch (MalformedURLException e) { e.printStackTrace(); } } public void makeRequest(HttpRequest httpRequest) { makeRequest(httpRequest, "http://google.com"); } public static void main(String[] args) { new Main().makeRequest(new BasicHttpRequest()); } }
W przysłonięciem metod mamy do czynienia podczas rozszerzania klasy przez klasę – a dokładnie w momencie, gdy chcemy przysłonić implementację klasy rodzica własną.
Omawiany mechanizm można zauważyć na poniższych dwóch klasach: Parent oraz Child.
package org.blog; public class Parent { public String name; public Parent(String name) { this.name = name; } public String sayHello() { return "Hello, I am " + name; } public String todoSth() { return "I'm " + name; } }
Oraz druga klasa:
package org.blog; public class Child extends Parent { public Child(String name) { super(name); } @Override public String sayHello() { return "Hello, my name is: " + name; } @Override public String todoSth() { return super.todoSth().toUpperCase(); } }
Warto wspomnieć, że możemy również odwołać się w klasie dziedziczącej do metody z klasy rodzica poprzez słowo kluczowe super i bez problemu wywołać ową metodę – tak jak to się dzieje w metodzie todoSth.
Adnotacja @Override pełni również ważną funkcję podczas przesłaniania metod – sprawdź ten mechanizm w innym pytaniu rekrutacyjnym.
Spoko!