凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 48909
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

今回は名前のないカクテルを。

名前が無いのに使えるの?と思うかもしれません。しかし、名前がなくても役に立つのです。
名前がなくとも役目を果たせるのはポリモーフィズムを利用するからなんですね。

Runnable runnable = new Runnable() {
  /** Runnable#run()の実装 */
  public void run() {
    // ...
  }
};

これが無名クラスと呼ばれるものです。内部クラスの一種で、newで型名の記述の後に { }で囲って実装を書きます。 具体的な型名には名前がないけれども、その型を継承した何かなんだよ、ということがわかります。
ポリモーフィズムで扱う限りはインターフェースとなる型だけを知っていればよく、実装が何型なのかは意識しないでいいんですね。

この記述に慣れるまでは「なんでinterfaceなのにnewできるの!?」と思うかもしれません。 知らずに遭遇するとわけのわからない構文ですね…。

なお、無名クラスはinterfaceでなくとも、具象型を対象に作ることもできます。

java.awt.Point p = new java.awt.Point(){
  @Override
  public String toString() {
    return "hello java!";
  }
};

この例ではjava.awt.PointクラスのtoString()をオーバーライドしています。 その場でちょっとだけオーバーライドしたい、abstractメソッドを実装したいときなどにこれらの記述法は便利です。 主にswingやawtのイベントリスナでよく使われます。

投稿日時 : 2007年8月2日 12:13
コメント
No comments posted yet.
タイトル
名前
Url
コメント