The fact is that acceleration will always be successful, therefore it is safe, while downcasting can fail:
String x = getStringFromSomewhere(); Object y = x;
But:
Object x = getObjectFromSomewhere(); String y = (String) x;
Since this is a "dangerous" operation, the language forces you to do this explicitly - you basically tell the compiler, "I know more than you do at this moment!"
source share