Java 匿名クラスのサンプル

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

目次

匿名クラス

new  基底クラス名/インターフェース名(引数) {
    処理内容
};
  • 匿名クラスにはクラス名がありません。
  • newの後に指定するのは、基底クラス(親クラス)またはインターフェースです。
  • newの後に基底クラスを指定した場合は、基底クラスを継承したクラスのインスタンスを生成します。
  • newの後にインターフェースを指定した場合は、インターフェースを実装したクラスのインスタンスを生成します。
  • その時のみでしか使わない時に使用します。
  • 最後にセミコロン(;)をつけます。

基底クラスを指定するサンプル

匿名クラスで、基底クラスを指定するサンプルです。
11,12行目は、匿名クラスです。Color1は3行目の基底クラス(親クラス)です。
13行目は、メソッドを実行しています。

package test1;

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

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

基底クラスを指定するサンプル(オーバーライド)

匿名クラスでオーバーライドを行うサンプルです。
11-16行目は、匿名クラスです。
4行目と13行目は同じメソッド名です。オーバーライドしています。
17行目は、メソッドを実行しています。オーバーライドにより上書きされ「黄」が表示されます。

package test1;

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

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

基底クラスを指定するサンプル(新規メソッドを追加)

匿名クラスに新規メソッドを追加するサンプルです。
11-15行目は、匿名クラスです。
12行目は、基底クラスにないメソッドを追加しました。
16行目は、エラーになります。11行目の変数c1の型は基底クラスの型のためです。クラス名がないのでwrite2メソッドは実行できません。

package test1;

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

		Color1 c1 = new Color1() {
			public void write2() {
				System.out.println("黄");
			}
		};
//		c1.write2();
	}
}

インターフェースを指定するサンプル

匿名クラスで、インターフェースを指定するサンプルです。
9-14行目は、匿名クラスです。Color1は3行目のインターフェースです。
15行目は、メソッドを実行しています。

package test1;

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

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

関連の記事

Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの継承とオーバーライドのサンプル



△上に戻る