Java 匿名クラスのサンプル

Javaの匿名クラスのサンプルです。

目次

仕組み 匿名クラスとは
サンプル 匿名クラスでクラスを指定
  匿名クラスでオーバーライドを行う
  匿名クラスにメソッドを追加
  匿名クラスでインターフェースを指定

匿名クラスとは

  • 1回限りの処理を行う時に使用します。
  • newの後ろは、既にあるクラスまたはインターフェースを継承していることになります。処理自体のクラス名はありません。
  • 見分け方は、匿名クラスは、クラス名またはインターフェース名の後ろに波括弧( { } )が付いています。波括弧の中にメソッドの処理を記述します。
    普通のクラスでは、後ろに波括弧( { } )がありません。
    例:変数の型 変数 = new  クラス名( );
  • 変数に代入しないで実行できます(上段図)。変数に代入しても実行できます(下段図)。
  • 最後にセミコロン(;)が必要です。
  • 無名クラスともいいます。

匿名クラスでクラスを指定

匿名クラスでクラスを指定するサンプルです。

package test1;

class Color1{
	public void write1() {
		System.out.println("赤");
	}
}
public class Test1 {
	public static void main(String[] args) {

		new Color1() {
		}.write1(); //赤
		
		Color1 c1 = new Color1() {
		};
		c1.write1(); //赤
	}
}

3行目は、通常のクラスです。
11,12行目は、匿名クラスです。変数に代入せず実行できます。
11行目のColor1は3行目のクラスを指しています。
14,15行目も、匿名クラスです。変数に代入し16行目で実行しています。

匿名クラスでオーバーライドを行う

匿名クラスでオーバーライドを行うサンプルです。

package test1;

class Color1{
	public void write1() {
		System.out.println("赤");
	}
}
public class Test1 {
	public static void main(String[] args) {

		new Color1() {
			@Override
			public void write1() {
				System.out.println("黄");
			}
		}.write1(); //黄
	}
}

11行目のColor1は3行目のクラスを指しています。
4行目と13行目は同じメソッド名です。オーバーライドしています。
16行目は、メソッドを実行しています。オーバーライドにより「黄」が表示されます。

匿名クラスにメソッドを追加

匿名クラスにメソッドを追加するサンプルです。

package test1;

class Color1{
	public void write1() {
		System.out.println("赤");
	}
}
public class Test1 {
	public static void main(String[] args) {

		new Color1() {
			public void write2() {
				System.out.println("黄");
			}
		}.write2(); //黄
		
		Color1 c1 = new Color1() {
			public void write2() {
				System.out.println("黄");
			}
		};
//		c1.write2(); //この場合だとエラーになる
	}
}

12,18行目は、3行目のColor1クラスにない新規メソッドを追加しています。
15行目のメソッドは実行できます。
22行目のメソッドはエラーになり実行できません。

匿名クラスでインターフェースを指定

匿名クラスでインターフェースを指定するサンプルです。

package test1;

interface Color1 {
	void write1();
}
public class Test1 {
	public static void main(String[] args) {

		new Color1() {
			@Override
			public void write1() {
				System.out.println("青");
			}
		}.write1(); //青

		Color1 c1 = new Color1() {
			@Override
			public void write1() {
				System.out.println("青");
			}
		};
		c1.write1(); //青
	}
}

9~14行目と16~22行目は、匿名クラスです。
9,16行目のColor1は3行目のインターフェースを指しています。
14,22行目は、メソッドを実行しています。

関連の記事

Java ラムダ式のサンプル
Java ラムダ式で関数型インターフェースを使用

△上に戻る