Przykład:Java: rekurencja ciągu głównego klasy zwraca podklasa-metoda zamiast własnej metody
class MainClass {
public doIt() {
...
else doIt();
}
}
class SubClass extends MainClass {
@Override
public doIt() {
super.doIt();
...
}
}
Teraz problem jest:
- nazywam SubClass.doIt()
- MainClass .doIt() jest nazywane
- MainClass.doIt() wywołuje rekursję doIt()
Ale: wywoływana jest metoda SubClass.doIt() zamiast MainClass.doIt()
To jest bardzo dziwne zachowanie i problemy są programowane! Próbowałem wywołać rekursję za pomocą this.doIt(), ale to nie pomogło. Ktoś ma pomysł?
Dzięki za odpowiedzi, ten problem został rozwiązany.
To jest polimorfizm dla ciebie. – GriffeyDog
"* To bardzo dziwne zachowanie *" niezupełnie, "else doIt()' jest takie samo jak 'else this.doIt()' ale 'this' odnosi się do bieżącej instancji, a dzięki dynamicznemu wiązaniu (mechanizm polimorfizmów) kod od metody klasy najbliższej bieżącego typu 'this' jest wywoływana. Ponieważ najbliższą klasą do 'SubClass' zawierającą' doIt' jest 'SubClass', ten kod jest wywoływany. – Pshemo
To rzekome zachowanie. –