解決済み

インターフェースは New 出来ない! の?

  • すぐに回答を!
  • 質問No.263263
  • 閲覧数384
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 68% (221/322)

現在 JDKSE 1.3.1 で Java の調査をしています。

Event 関連の調査中に疑問に感じた事が有ります。
下記の件に関し、意見有りましたらよろしくお願い致します。

まずJava 言語の仕様で、「インターフェースはインスタンスを作成できない。」
と有ります。

これはあるサンプルコードからの抜粋です。
内容は、Applet にコマンドボタンコントロールを追加し、クリックされた際の処理を登録しているんですが・・・・・

button.addActionListener(new ActionListener(){.....

となっています。
コンパイル成功し、正常に記述されたイベント処理が行われています。

が、addActionListener の引数で渡されている ActionListener はインターフェースですよね?
あれっ、違うのかな・・・・

なぜ、new ActionListener()... として引数に渡せるのでしょうか?

現在自身で勉強中なのですが、平行して質問させて頂きました。
よろしくお願い致します。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 50% (604/1207)

匿名クラスのインスタンスを作っているんだと思います。

この場合は、ActionListenerインタフェースを実装する新しいクラスを作り、さらにそのインスタンスを作成しています。あくまでも「インタフェースを実装したクラス」を new しているのであり、インタフェースを new しているのではありません。

匿名クラスというのは、コードの中でクラスの設計とインスタンス化を同時に行うもので、インタフェースを実装したり、ほかのクラスのメソッドをオーバーライドしたクラスを臨時に作成したりするのに使われます。

button.addActionListener(new ActionListener(){..... のあとに、ActionListenerインタフェースを実装するためのメソッドがかかれているはずです。
お礼コメント
sho_ta

お礼率 68% (221/322)

回答有り難うございました。

匿名クラスなのですね・・・・
なるほど、確かに「匿名」なのでclass 名を指定しないのか!

有り難うございました。
投稿日時 - 2002-05-13 09:02:57
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ