Wiem, jak przeciążać metodę i jak nadpisać metodę. Ale czy możliwe jest przeciążenie ORAZ przesłonięcie metody w tym samym czasie? Jeśli tak, proszę podać przykład.Przeciążone i przesłonięte w Javie
Odpowiedz
Przeciążanie i nadpisywanie są komplementarne, przeciążanie oznacza tę samą nazwę metody, ale różne parametry, a nadpisywanie oznacza tę samą nazwę metody w podklasie o tych samych parametrach. Nie jest więc możliwe przeciążanie i nadpisywanie w tym samym czasie, ponieważ przeciążenie implikuje różne parametry.
Przykłady:
class A {
public void doSth() { /// }
}
class B extends A {
public void doSth() { /* method overriden */ }
public void doSth(String b) { /* method overloaded */ }
}
Cheers!
przeciążanie i przeciążanie to tylko abstrakcje. Przeciążanie oznacza po prostu, że kompilator używa nazwy w połączeniu z typami i liczbą parametrów do adresowania funkcji, która ma zostać wywołana. W rzeczywistości przeciążanie metody nie różni się od nazywania jej czymś innym, ponieważ klucz używany przez kompilator do wyszukiwania funkcji jest kombinacją nazwy i listy parametrów.
Nadpisywanie jest na tej samej zasadzie, z wyjątkiem sytuacji, gdy kompilator może adresować funkcję overriden ze słowem kluczowym super
.
Czy można zatem zastąpić przeciążoną funkcję? Tak, ponieważ metoda przeciążenia jest zupełnie inną metodą w oczach kompilatora.
Przesłanianie to nie to samo. Decyzja, która metoda jest wywoływana, jest odkładana na środowisko wykonawcze. Kompilator nie decyduje o tym. – EJP
Dzięki, to jest pomocne! –
@EJP - Ostatecznie kompilator podejmuje decyzję, nawet jeśli jest on wyodrębniany poprzez konstrukcję tabel i przypisanie punktów kontrolnych, aby ułatwić dynamiczną wysyłkę. Związane więzy muszą być gdzieś zainicjowane. – nsfyn55
To zależy, co masz na myśli. Metoda może być nadpisaniem dla przeciążonej metody w nadklasie. Możesz przeciążyć metodę, którą jednocześnie przesłaniasz, używając innej metody.
Nie można jednak zastosować jednej metody, która jest jednocześnie przeciążeniem i nadpisaniem o wartości new. Aby metoda mogła być nadpisywana, inna metoda z tym samym podpisem musi już istnieć w nadklasie ... a to oznacza, że ta metoda nie może być zastąpiona przez inną metodę.
- 1. Typy, krotki, domyślny priorytet i metody przeciążone
- 2. Przeciążone sygnały pyside (QComboBox)
- 3. Jak wyświetlić przesłonięte/zacienione powiązania klawiszy?
- 4. Czy EL obsługuje przeciążone metody?
- 5. Przeciążone funkcje w C++ DLL plik DEF
- 6. Przeciążone funkcja w klasycznym ASP JScript
- 7. rodzajowych i wywołanie przeciążone metody z klasy różnica - pierwszeństwa kwestii
- 8. Kaskadowanie efektu atrybutu na przesłonięte właściwości w klasach podrzędnych
- 9. Dlaczego funkcje RHR nie mogą być przeciążone?
- 10. Semafory i Threadpools w Javie
- 11. Executor i demon w Javie
- 12. Android i IPv6 w Javie
- 13. ConcurrentHashMap i Hashtable w Javie
- 14. ArrayLists i indexers w Javie
- 15. replace() i replaceAll() w Javie
- 16. push_back() i push_front() w Javie
- 17. Korzystanie przeciążone VB.NET Not operator z C#
- 18. Przeciążone wskaźnik funkcji członka do szablonu
- 19. X edycji niestandardowy typ pola nie przestrzegając przesłonięte domyślne
- 20. Wiosna bezpieczeństwo klienta filtr przesłonięte przez podstawowego zabezpieczenia http
- 21. priorytet przy wyborze przeciążone funkcje szablonów w C++
- 22. C-sharp "#region" i "#endregion" w Javie?
- 23. Łączenie ciągów i Autoboxing w Javie
- 24. Jaka jest różnica między! = I =! w Javie?
- 25. Refaktoryzowane metody i kompatybilność binarna w Javie
- 26. Prawdopodobne i nieprawdopodobne przyczyny Heisenbugs w Javie?
- 27. Porównanie Mersenne Twister w Javie i matlab
- 28. buforowane i niebuforowane Strumienie w Javie
- 29. Demonstrują kowariancję i kontrawariancje w Javie?
- 30. szyfrowania Triple DES i odszyfrowywania w Javie
Jeśli chcesz, możesz zastąpić przeciążoną metodę. Jest tak blisko, jak to tylko możliwe. – user845279
Kiedy to się dzieje, co jest odpowiedzialne za wiązanie (pod względem statycznym lub dynamicznym) metody? Zastępujesz lub przeciążasz? – zgulser