since the Hole is declared an abstract class, but so far as we understand, the instantiation of Penis does not encounter any need for abstraction from the client programming point of view.
somehow, my hunch is that recharging and waiting loop is naturally implemented by the UI of the client side.