OOP classes vs Higher-order Functions (HOFs)
Briefly

There is no difference between these 3 implementations, conceptually they are the same thing, exposing the same complexity.
This breaks the 'Liskov substitution principle' because the derived class no longer behaves like the inherited class. This is why methods should be non-final with intention.
Read at Alexandru Nedelcu
[
add
]
[
|
|
]