After knowing primitive data types and Java rules of Data Type Casting (Type Conversion), let us cast long to short as an example.
The long takes 8 bytes of memory and short takes 2 bytes of memory. Assigning 8 bytes of memory to 2 bytes of memory requires explicit casting. It is like not possible to pour bigger bottle water into a smaller bottle.
The left-side value can be assigned to any right-side value and is done implicitly. The reverse like long to short requires explicit casting.
Examples of implicit casting
short x = 10; // 2 bytes
int y = x; // 2 bytes to 4 bytesbyte x = 10; // 1 byte
int y = x; // 1 byte to 4 bytes
Following program on long to short explains explicit casting. Observe, Java style syntax where long is type explicitlly converted to short.
public class Conversions
{
public static void main(String args[])
{
long l1 = 10; // 8 bytes
// short s1 = l1; // error, 8 bytes long to 2 bytes short
short s1 = (short) l1; // 8 bytes long is type converted to 2 bytes short
System.out.println("long value: " + l1); // prints 10
System.out.println("Converted short value: " + s1); // prints 10
}
}

Output screenshot of long to short Java
short s1 = l1;
The above statement raises a compilation error "possible loss of precision" as 8 bytes value is assigned to 2 bytes and requires explicit casting.
short s1 = (short) l1;
The long l1 is explicitly type casted to short s1. Observe, the syntax of explicit casting. On both sides, it should be short. This is known as narrowing conversion.