Serializable および Externalizable クラスの場合には、writeReplace メソッドは、オブジェクトが書き込まれる前に、オブジェクトのクラスがストリーム内で自らの置換を指定することを許可します。writeReplace メソッドを実装することにより、クラスは、直列化されている自らのインスタンスの型およびインスタンスを直接制御できます。 メソッドは、次のように定義されます。
ANY-ACCESS-MODIFIER Object writeReplace() {
throws ObjectStreamException;
ObjectOutputStream がストリームにオブジェクトを書き込む準備をしているとき、writeReplace メソッドが呼び出されます。ObjectOutputStream は、クラスが writeReplace メソッドを定義しているかどうかをチェックします。writeReplace メソッドが定義されている場合は、このメソッドが呼び出されます。これにより、オブジェクトがストリーム内で自らの置換を指定できるようになります。 返されるオブジェクトは、渡されるオブジェクトと同じ型であるか、あるいは読み込みおよび解釈処理後の型が、そのオブジェクトへのすべての参照と互換性がなければなりません。そうでない場合、型の不一致が検出されたときに、ClassCastException が発生します。