`createFoo(String)` does not _override_ `createFoo(int)` (they are _overloaded_, though); Actually static methods never override other methods (or can be overridden). If `createFoo(String)` was non-static, another method `createFoo(String)` in a sub-type woud override it.

But I can reproduce the exception with this test, need to have a closer look tomorrow.