Interesting. Then, why isn't the bytecode always stored with the caller, that way you can have return-type dispatch?
I think the compiler actually has to work around that when you narrow the return type of an overriden function: A method Object Base::get() overriden with Integer Child::get() will result in an additional compiler generated Object Child::get() in the bytecode.
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.htm...