The if/else part is really astonishing. The other ones I can understand in SOME way but the if/else is logic that's used in every day life. If I do this then that will happen, otherwise this other thing may happen. Very surprising.
Not me, "OOP class hierarchys" still incomprehensible gibberish here.