Why Java function can not overloaded based on return type?

Method overloading is widely used feature of most of the programming languages by why based on only class names and method argument lists? Why not distinguish between methods based on their return values?

To understand this take below example

void f() {
}
int f() {
}

This works fine when the compiler can unequivocally determine the meaning from the context, as in

int x = f().

However, you can also call a method and ignore the return value. This is often referred to as calling a method for itsside effect, since you don’t care about the return value, but instead want the other effects of the method call. So ifyou call the method this way:

f();

how can Java determine which f( ) should be called? And how could someone reading the code see it? Because of this sort of problem, you cannot use return value types to distinguish overloaded methods.