Cześć, od niedawna uczę się javy i nie potrafię zrozumieć jak działa poniższy program
https://hyperskill.org/learn/step/3063#comment
Dlaczego wynik to 38, a nie 55? Według mnie klasa MagicNumberGenerator powinna odziedziczyć funkcję generate() z klasy NumberGenerator. W takim wypadku generator.generate() powinno zwrócić super.generate() + getNumber() w klasie MagicNumberGenerator, co jest równe getNumber() (17) + super.generate() + getNumber() z klasy NumberGenerator co jest równe kolejne 17 z getNumber() i w końcu + generate() z BaseNumberGenerator (21) czyli razem 55. Sprawdzałem debuggerem i wywołanie generator.generate() wywołuje funkcje generate() z klasy NumberGenerator. Dlaczego nie wywołuje tej funkcji w klasie MagicNumberGenerator w której ta funkcja NIE była nadpisana, ale powinna być odziedziczona z klasy NumberGenerator? Jeśli nadpiszę funckję generate() w klasie MagicNumberGenerator to stanie się tak jak myślałem, że powinno się stać nawet bez nadpisywania tej metody (wynik 55). Dlaczego ta funkcja jest uruchamiana z klasy NumberGenerator jeśli jej nie nadpiszemy w MagicNumberGenerator?
Edit: czy jeśli funkcja jest dziedziczona, ale nie nadpisana to jej egzekucja tak jakby wykona się w superklasie, a nie zostanie "przekopiowana" do subklasy?