• ベストアンサー

A a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、 ResponseListener listener = new ResponseListener() { //略 }; という書き方があったのですが、どういう意味になるのでしょうか? インスタンスの作り方は単に A a = new A(); だと思うのですが…。 http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

無名クラスと呼ばれるものよ。 私も良くやるわ。 ちなみに A a = new A(); はできないわよ。 Aはインターフェースだからね。 上記の場合、正式に実装するなら、 ResponseListenerをimplementsした MyResponseListener(仮名)を別途作成し、 それを ResponseListener listener = new MyResponseListener(); とする必要があるわ。 でも、このMyResponseListenerは 今ここでしか使わない、他からまったく参照する必要のない 超ローカルなクラスなのよ。 このメソッドが終了すればGCにかけてもいいわけ。 そんな場合、わざわざクラスを1つ作る必要なくて その場でちょちょいとやってしまうことができるのよ。 それが無名クラスっていう実装方法よ。 http://www.javaroad.jp/java_class15.htm FileFilterやCompare、Runnableなんかで 他のクラスで再利用しないときは良くやるわ。

netw2009
質問者

お礼

そうなのですね。 お二方、ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#94983
noname#94983
回答No.1

これは一般に「無名クラス」とか「匿名クラス」と呼ばれるもの。インスタンス生成時に、その後にある{}内のコードを自身に組み込んだ形でオブジェクトが生成される。例えば、 A a = new A(){void a(){……} }; こんな具合になっていたら、生成されたaインスタンスには、この{}にあるメソッドaが組み込み済みとなっている。 本来のクラスAのインスタンスとは異なるインスタンスが生成されるわけで、ということはこのaインスタンスは、クラスAのインスタンスではなくなってしまう(正確には、クラスAを継承した、何らかのクラスのインスタンスということになる)。が、そうしたクラスは定義されておらず、この場で名前のないクラスのインスタンスが作られた、としかいいようがない。で、無名クラスとか匿名クラスといわれるわけ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • インタフェースをnew?

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

    • ベストアンサー
    • Java
  • newを書く場所とか挙動について、分からないので

    newについて、幾つか分からないことがあるので、教えてください ■newしたら、その状態はどこまで保持されるのでしょうか? あるサイトに、 >PHPスクリプトは、処理が全て終了すると共に、メモリは開放されます と書かれていたのですが、 この場合の「処理」は、何を意味するのでしょうか? ファイルの一番最後まで来たら、newで確保した何かは自動的に解放される、 という意味でしょうか? <例> ・a.php ・b.php ・c.php … クラス記述 ・aからbへPOST ・aでもbでも、cのクラスを利用したい この場合、a、b両方のファイルに、必ず、new C と書かなければいけないのでしょうか? それとも、ファイルaにだけ、new C と書いて、 bで、require_once("a.php");としてもよいのでしょうか? あるいは、他に何か書き方があるのでしょうか? <選択肢> ・使いたいファイルで必ずnewする必要がある ・使いたいファイルで必ずしもnewする必要はない ■インスタンス名は違ってもよいのでしょうか? 上記例で、 ・ファイルaに、hoge1=new C; ・ファイルbに、hoge2=new C; とやってみたらエラーにならなかったのですが、 ということは、例えば同じクラスを複数のファイルで利用したい場合、 どうするのがいいのでしょうか? <選択肢> ・new する際、常に同じインスタンス名を利用 ・new する際、ファイル毎に異なるインスタンス名を利用 ・new する際のインスタンス名は、同じでも違っても、どっちでもよい

    • ベストアンサー
    • PHP
  • C#において、同じインスタンスを何度もnewしてよいでしょうか。

    C#において、同じインスタンスを何度もnewしてよいでしょうか。 (インターネットで探したんですが、意外に見つからなかったもので質問させていただきました。) 例えば A a = new A(); //なにかしら処理 a = new A(); //なにかしら処理 a = new A(); //なにかしら処理 と書いた場合、最初と2番目のnewしたインスタンスは、ガベージコレクタによっていずれ破棄されると考えてよろしいでしょうか。 また上記のコードを A a = new A(); //なにかしら処理 A a = new A(); //なにかしら処理 A a = new A(); //なにかしら処理 のように、宣言から書きなおしている場合では、どのような違いがあるのでしょうか。 よろしくお願いします。

  • $a = new SomeClass();

    <html> <head> <meta "charset=utf-8" /> <title>P76instanceof.php</title> </head> <body> <?php class SomeClass { } $a = new SomeClass(); if ($a instanceof SomeClass){ echo'$aは SomeClass のインスタンスです',PHP_EOL; } ?> </body> </html>    以上ですが!  $a = new SomeClass();のnewの役割を教えてくだい  よろしくお願いします。

    • ベストアンサー
    • PHP
  • js new

    javascriptのnewについて javascriptのnewはJava言語のnew(インスタンスの生成)と意味は同じですか?

  • C++のnewで確保した領域について

    こんにちわ。C++を勉強し始めた者です。 new演算子を使ってインスタンスを生成した場合、それはスタックではなくヒープ領域に確保され、不要になったらdeleteを使って領域を解放しなければいけない認識です。 C++の初心者向けサンプルコードを見ていて疑問があったので質問させてください。 (例)クラスA.cpp ======================== #include <Car> #include <Garage> ~略~ クラスAのコンストラクタ{ Car *mycar = new Car("プリウス"); addGarage( mycar ); } クラスAのデストラクタ{ } ======================== 上記のような実装のクラスAがあったのですが、コンストラクタでCarクラスのインスタンス生成をして、オート変数の*mycarに格納して、Garageの公開関数に渡しています。 質問1:このクラスAをインスタンス生成した場合、コンストラクタで確保したヒープ領域は、プログラム終了時まで解放されない認識であっていますか? 質問2:オート変数の*mycarはコンストラクタからreturnした時点で解放されてしまうので、今のままではデストラクタでヒープ領域をdeleteできない認識であっていますか? 質問3:newで生成したインスタンスへのポインタは、その関数内でdeleteしない場合、メンバ変数やstatic変数、グローバル変数に格納しなければdeleteできなくなるという理解であっていますか? 質問4:C++のコードでnewした戻り値をオート変数に格納するプログラムは通常使うことはあるのですか?

  • new クラス名(Activity名.this);

    Android ・下記のようなコードがあるのですが、このとき「.this」の意味を教えてください ・Activityクラス自身? ・「.」で繋いでいる意味も、「this」の意味も良く分かりません ・thisだけでは駄目? ・引数は1つ? public class Hoge extends Activity {  public class C1 {//インナークラス?   protected m1method(略) {   略 = new クラス名(Hoge.this);

    • ベストアンサー
    • Java
  • String a = "a"; と String b = new String ("b"); の違い

    String a = "a"; String b = new String ("b"); お伺いしたいのですが、 b は String のインスタンスを作ってると思いますが、 a はどんなことをしてるのでしょうか?

    • ベストアンサー
    • Java
  • newと配列?

    基本的な質問になるのですが、 例が書かれているサイトが見つからない為、質問とさせていただきたいと思います。 自分はUNIXでCの開発を行っていたのですが、C++に関してはよくわかりません。 CString a[10]; と CString a = new CString[10]; の違いを教えていただけないでしょうか? newを行い、deleteをすることで、 コンストラクタ、デストラクタを呼び出せる事はわかるのですが、 それ以外の違いはどのような点になるのですか? インスタンスについて理解できていないのでこのような 基本的な質問となりますが、ご教授願います。

  • "A " Happy New Year?

    年賀状に書く英語としてよく知られる"A Happy New Year"ですが、最近とあるサイトで「英語圏ではAは入れない。"Happy New Year!"と言う」と書いてあるのを見ました。AをつけるのはMay you~とかI wish~のように先に言葉が来る場合であって、あけましておめでとうと言う呼びかけではAを使わない、と。 英語圏での経験のある方にお聞きしたいのですが、これは本当のことなのでしょうか。あるいは書き言葉としてはAを入れるとか、それは前のMay you~が省略されているのだ、ということなのだとか、ご存知の方がいらっしゃいましたら教えて下さい。 "Happy New Year"と書いた年賀状を送ったら、「こいつ"A"を忘れてるよ。ははは」とか思われますかねぇ。