It is also possible to override invokeMethod for static methods.
As an example of overriding invokeMethod for static methods, take this simple example:
So what is happening here? Well firstly we've overridden
invokeMethod using the 'static' qualifier and by assigning it an appropriate closure, but in addition we first look-up a MetaMethod with the line:
A MetaMethod in Groovy is a method that is known to exist on the MetaClass whether added at runtime or whatever, thus we check if there is an existing MetaMethod and if there isn't we simply return "bar", hence the behaviour of the assert statements is correct.