There is a beautiful explanation on maha's page but anyway I will try and clear your doubt when you assign final to a variable then the value cannot be changed so int i gets the value 10 and 10 can be easily cast into byte without explicit conversion so it doesnot give any compilation error but long what so ever may haapen caanot be cast into a byte.Hope this clears your doubt.
regards,
Shankar.