bit late on "by design" party - java 'binary' (not source, which is easier) compatibility is an exceptionally important feature. E.g. changing method signature like
void x(int val) to
void x(long val) does break the binary compatibility and it means the original method has to be preserved, potentially as something like
void x(int val){x((long) val);} - which just calls the new method by casting val. It some cases the original method might be marked as deprecated.
There are countless examples of such a behavior.