Static polymorphism is when a method is overloaded with different signatures, but the signature used is determined at compile time. This is also known as early binding because the type of object is determined at compile time. An example of static polymorphism would be if there were two methods, both called add. One method could take in two integers and return the sum, while the other could concatenate two strings. The correct add method would be selected at compile time-based on the types of arguments being passed in.   Static polymorphism is generally preferred over dynamic polymorphism because it can lead to more efficient code since the decision about which method to call is made during compilation rather than at runtime. Additionally, it can avoid potential errors that could occur if the wrong method were called at runtime.