アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaを学習している者です。

下記のような記述があったのですが、これはどういった処理になるのでしょうか?インスタンス化した時に{};をくっつけているところが分かりません。

protected boolean checkAnswer(){
EachCellOpe checkOp = new EachCellOpe(){//EachCellOpeは抽象クラス
//この中にいくつかのメソッドが実装される
};//←この「;」は!?
}

よろしくお願いします。

A 回答 (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などのイベント処理を見ると、そのようなコードがたくさん登場します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/25 16:14

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



参考URL:http://www.itarchitect.jp/technology_and_program …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/25 16:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!