I don't like the term "static polymorphism" and would prefer never to use it.
I think all polymorphism is "dynamic" ("runtime" would be a better
word) and that is (in Java™) done entirely with method overriding.
Method overloading is probably not polymorphism at all.
Some people say "static polymorphism" which might better be called "compile-time polymorphism" to mean hiding fields and static methods by declaring fields and static methods with the same name/signature. If you look in books like
Effective Java by Bloch or our
FAQ (no 16) you can find out how much confusion that can cause.
It may be possible to implement compile-time polymorphism in other languages than
Java.