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ę.
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