2016-09-08 7 views
-1

私は逐次化を学んでおり、この機能(外部化)を知りました。Javaシリアル化についての説明

このメソッドは、インスタンス変数をオブジェクトに書き込むためのObjectOutput型のオブジェクトoiを作成することを理解します。 ObjectOutputクラスについてもっと知りたいとき、ObjectOutputがインターフェイスであることに驚きました。私はJavaがオブジェクトがタイプインタフェースの作成されるのを許可しないと思った。私が間違ったことを理解していれば、なぜこれが当てはまるか教えてください。

+0

ObjectOutputはここでは作成されません。これは呼び出し元によって提供されるようにメソッドの引数です。また、提供されるオブジェクトがインタフェースを実装している限り、オブジェクトはObjectOutput型になることができます。 – trappski

答えて

0

まず、trappskiがコメントに指摘されているように、writeExternalは何も作成しません。 ObjectOutputは、writeExternalを呼び出すコードによって渡されるパラメータです。

インターフェイスのトリックは、それらが「契約」であるということです。インターフェイスからオブジェクトを作成することはできませんが、インターフェイスを実装するクラスを作成して、それらのクラスからオブジェクトを作成することができます。次に、インターフェイスを実装しているクラスのオブジェクトを使用して、インターフェイスが必要な場所に置くことができます。あなたはそのようなObjectOutputを実装するクラスBigObjectOutput持っている場合は、この場合には

、:

class BigObjectOutput implements ObjectOutput { 
    // code... 
} 

を、あなたは次のようにタイプBigObjectOutputのオブジェクトを作成することができます

BigObjectOutput bigObject = new BigObjectOutput; 

そして中にそれを渡しますあなたのメソッドBigObjectOutputObjectOutputを実装しているので、

なぜあなたはこれをしたいですか?あなたはそのタイプObjectOutputを実装する任意のオブジェクトを渡すことができるように:

class LittleObjectOutput implements ObjectOutput { 
    // code... 
} 

LittleObjectOutput littleObject = new LittleObjectOutput(); 

writeOutput(littleObject); 

それは、型がそれだけでBigObjectOutput秒かかった場合よりもOutputObjectインタフェースを実装する任意のオブジェクトを受け入れるのであれば、あなたのwriteOutputがより有用です。

+0

ありがとうございます@Emma Burrows、あなたの例では 'code 'と言っています – Srinivas

0

おかげで@Emma。 LittleObjectOutputクラスを拡張することを意味しましたか?BigObjectOutputはObjectOutputを実装しています。

writeExternal(littleObject);

  • この機能は、親だけでなく子供も使用できる場合に便利です。
+0

いいえ、私の例では、' BigObjectOutput'と 'LittleObjectOutput'の両方がインターフェースを実装しています。彼らはお互いを拡張する必要はありません。ここでの重要な点は、どちらもインターフェイスを実装しているため、そのインターフェイスが必要なメソッドで両方を使用できることです。 –

関連する問題