Why is upcasting considered safe in Java but downcasting can cause runtime errors?
AUpcasting is implicit and always valid; downcasting requires explicit cast and may fail if object type mismatches.
BUpcasting narrows the type, downcasting widens it.
CDowncasting is implicit and always valid; upcasting requires explicit cast.
DBoth upcasting and downcasting always cause runtime errors.