title: What's the rationale behind "Serializable" interface?
body: <p>If we want to serialize an object, we can simply do the following implementation:</p>
  
  <pre><code>class MyClass implements Serializable
  {
    private static final long serialVersionUID = 12345L;
  }
  </code></pre>
  
  <p>And no extra effort is needed to imperatively implement how the object will be written into and read from files. Java simply takes care of everything. </p>
  
  <p>On the other hand, <code>Externalizable</code> does define explicit serialization and deserialization methods so we can program imperatively. </p>
  
  <p>This leaves me the question: if no extra effort is needed for <code>Serializable</code>, what's the rationale to make it an interface that we have to implement to serialize/deserialize objects, instead of making it by default that every object can be serialized/deserialized?</p>