I think what confuses you is that b1 which is of type EBike is passed to display() as Bike yet when display() calls move() on it, b1 still acts as EBike! i.e. it outputs 48 and not 24!
However that's the whole idea of polymorphism. It's that base class can take form of any class that extended it.
http://www.cplusplus.com/doc/tutorial/polymorphism/
In your example Bike takes form of EBike.
EBike replaces its parent's void move() with its own void move() but Bike* can still point to EBike (and Bike& can still reference to EBike) regardless that the implementation of move() is different
That's what it means that Bike can take form of EBike.