2012-05-13 16 views

Odpowiedz

13

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!

+5

Jeśli chcesz, możesz zastąpić przeciążoną metodę. Jest tak blisko, jak to tylko możliwe. – user845279

+0

Kiedy to się dzieje, co jest odpowiedzialne za wiązanie (pod względem statycznym lub dynamicznym) metody? Zastępujesz lub przeciążasz? – zgulser

5

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.

+0

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

+0

Dzięki, to jest pomocne! –

+0

@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

1

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

Powiązane problemy