Jaka jest różnica między przeciążeniem metody a nadpisaniem jej w Javie?
Czy istnieje różnica w podpisie metody, specyfikatorze dostępu, typie zwrotu itp.?
java
object-oriented
użytkownik63948
źródło
źródło
Odpowiedzi:
Aby przeładować metodę nową metodą, nowa metoda powinna mieć inną sygnaturę. Tzn. Dwie przeciążone metody mają tę samą nazwę, ale różne parametry. Oto przykład dwóch przeciążonych metod:
Na podstawie typów parametrów zostanie wywołana odpowiednia metoda. Pamiętaj, że zmiana typu zwrotu nie wystarczy (choć możesz to zrobić dodatkowo).
Gdy metoda zostanie zastąpiona, nowa metoda ma ten sam podpis i w niektórych przypadkach zastępuje zastąpioną metodę. Oto przykład zastąpionej metody:
Wyboru dokonuje się na podstawie typu obiektu. Na przykład,
wywoła
someMethod
zB
. Możesz (i należy) dodać adnotację @Override:Teraz, jeśli przypadkowo zmienisz parametry w B, kompilator poinformuje cię, że nie przesłaniasz metodyMethod (), ale ją przeciążasz.
źródło
Przeciążenie metody mają tę samą nazwę, ale różne parametry.
Przesłanianie, implementacja podana w klasie bazowej zostaje zastąpiona implementacją w podklasie.
źródło
Pojęcia, o które pytasz, są omówione w samouczkach Java.
Wyjaśnienie zastępowania podano w następujący sposób:
Przeciążenie wyjaśniono w samouczku w następujący sposób:
Powyższe wyjaśnienie dotyczące przeciążenia wymienia kwalifikacje omówione w lekcji zatytułowanej „Interfejsy i dziedziczenie” :
źródło
Przeciążenie metody jest zwykle definiowane jako „zapewnianie wielu dostępnych metod o tej samej nazwie, różniących się liczbą i rodzajem wejść i wyjść”. Pomysł polega zazwyczaj na tym, że chcesz mieć możliwość wykonania tej samej podstawowej operacji przy różnych zestawach danych wejściowych: możesz na przykład „dodać” dowolne dwie wartości typu liczbowego, jednak zazwyczaj ważne jest, aby wiedzieć, jaki dokładnie typ wartość jest taka, że możesz skorzystać lub zaplanować określone zachowania tego typu. Jako taki, zdefiniowałbyś metodę dla każdej kombinacji typów numerycznych (i / lub kolekcji), które chcesz obsługiwać. Wszystkie te metody mają tę samą nazwę, ale różne „podpisy”; w czasie kompilacji
Przesłanianie metody jest zwykle definiowane jako „zapewnienie innej implementacji w klasie pochodnej metody o określonej sygnaturze zdefiniowanej w klasie bazowej”. Istnieje wiele powodów, aby przesłonić metodę; praktycznie wszystkie mają wspólny fakt, że klasa pochodna ma dodatkową wiedzę o tym, co należy zrobić, czego klasa podstawowa nie może poznać. Istnieją dwa warianty nadpisywania w większości języków OO; przesłonięcie może zastąpić metodę klasy bazowej lub rozszerzyćmetoda klasy bazowej. Różnica polega zwykle na tym, że klasa pochodna, która rozszerza implementację klasy podstawowej, wywoła przesłoniętą wersję metody klasy bazowej w pewnym momencie podczas wykonywania metody przesłaniającej. Pozwala to na przesłonięcie klas w celu „ponownego użycia” wspólnych obszarów operacji zawartych w klasie podstawowej.
źródło