- ベストアンサー
メソッドの中でインスタンス化が行われているとき。
javaを学習している者です。 下記のような記述があったのですが、これはどういった処理になるのでしょうか?インスタンス化した時に{};をくっつけているところが分かりません。 protected boolean checkAnswer(){ EachCellOpe checkOp = new EachCellOpe(){//EachCellOpeは抽象クラス //この中にいくつかのメソッドが実装される };//←この「;」は!? } よろしくお願いします。
- みんなの回答 (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などのイベント処理を見ると、そのようなコードがたくさん登場します。
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
無名クラスの書き方ですね。
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 なるほどぉ…よく調べてみたいと思います。(まだ勉強しなきゃいけないことたくさんあるな…)