First of all, if you don’t plan to ever serialize an instance of your class, there is no need to even think about serializing it. Only implement what you need, and don’t try to make your class serializable just for the sake of it.
If your object has a reference (transitive or direct) to any non-serializable object, and this reference is not marked with the transient
keyword, then your object won’t be serializable.
Generally, it makes no sense to serialize objects that can’t be reused when deserialized later or somewhere else. This could be because the state of the object is only meaningful here and now (if it has a reference to a running thread, for example), or because it uses some resource like a socket, a database connection, or something like that. A whole lot of objects don’t represent data, and shouldn’t be serializable.