I think the best explanation is in the API docs for the Serializable interface
The serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long:
When I started learning Java, I always had the API docs open along with the code editor. I find them to be an invaluable tool while learning. I would suggest you do the same. You never know what gem of knowledge you just might discover hidden in the API docs.