In most programming languages, method overloading is based on the method name and its parameter list (signature). Functions cannot be overloaded if they only differ by their return type because the compiler cannot determine which function to call based on usage.