• ベストアンサー

メソッドの中でインスタンス化が行われているとき。

javaを学習している者です。 下記のような記述があったのですが、これはどういった処理になるのでしょうか?インスタンス化した時に{};をくっつけているところが分かりません。 protected boolean checkAnswer(){ EachCellOpe checkOp = new EachCellOpe(){//EachCellOpeは抽象クラス //この中にいくつかのメソッドが実装される };//←この「;」は!? } よろしくお願いします。

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

  • ベストアンサー
  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.2

EachCellOpe checkOp = new EachCellOpe(){//EachCellOpeは抽象クラス //この中にいくつかのメソッドが実装される };//←この「;」は!? 無名インナークラス、匿名内部クラスとかいうやつですね。 class XXX extends EachCellOpe{ //この中にいくつかのメソッドが実装される } というEachCellOpeのサブクラスXXXが今作ってるクラス内にあったとして(内部クラス)、 これを使う場合、普通は EachCellOpe checkOp = new XXX(); とします。 ただ、XXXとか作るほどでない場合、さらにここでしか使われない時に、 いちいちクラスを定義するのもメンドウなので、 まとめて書いてしまおう、というわけでできたものです。 EachCellOpe checkOp = new EachCellOpe(); というコードの、「();」の間に、EachCellOpeクラスの抽象メソッドの実装を埋め込んでいる、 という風に考えると分かりやすいでしょうか。 EachCellOpe checkOp = new EachCellOpe(){/* クラスの中身(抽象メソッドの実装) */}; あくまで、「EachCellOpe checkOp = 」に続くJavaのコードの一部なので、 文の終わりには「;」が必要ですね。 セミコロンは無名インナークラスの一部ではなく、Javaの文の一部なわけです。 ちなみに、抽象クラスだけでなく、インターフェースでも同じように書くことができます。 AWT、Swingなどのイベント処理を見ると、そのようなコードがたくさん登場します。

rapun
質問者

お礼

回答ありがとうございます。 なるほどぉ…よく調べてみたいと思います。(まだ勉強しなきゃいけないことたくさんあるな…)

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

無名クラスの書き方ですね。

参考URL:
http://www.itarchitect.jp/technology_and_programming/-/27074-4.html
rapun
質問者

お礼

回答ありがとうございます。

関連するQ&A