• ベストアンサー

インタフェースをnew?

あるコードを読んでいて、 private Connection connection = null; final InputStream fin = in; connection = new Connection(){ public InputStream getInputStream(){ return fin; } }; というコードがあったのですが、意味が分かりません。 Connectionというのは、インタフェースですよね。なぜ、インタフェースにnewしてインスタンス化?しているのでしょうか?また、なぜ{}に;がついているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.1

これは「無名クラス(匿名クラス)」というもの。要するに、Connectionクラスではなく、名前はないが、Connectionを継承(implements)した「何か」のインスタンスを作っている。 new Connection()の後に{}があって、そこにメソッドの定義などが書かれているが、これは実行されたとき、これらのメソッドを実装した形でオブジェクトが作成される。ということは、これはConnectionクラスのインスタンスではない、ということになる(Connectionにないメソッドがあったり、Connectionのメソッドがオーバーライドされていて、Connectionとは明らかに異なるから)。といって、これには明確な名前の付けられたクラス定義も存在しない。 これは、その場でオンデマンドに新しいクラスが生成され、そのインスタンスが作られている、と想像すればいいだろう。したがって、Connectionではないのでnewしてインスタンスを作ることができる。わざわざクラスを定義するのは面倒くさい、一時的にインスタンスを作って利用できればいいや、というようなときに使われる。「無名クラス」で検索すれば、いろいろと情報が出てくるだろう。

関連するQ&A