【Java】匿名クラス

2018年3月11日

本稿では、匿名クラスについて説明します。

匿名クラスとは継承の一種なのですが、メソッド内のその場で、名前も付けずに処理を実装してしまおうという横着したい人向けの機能です。

最近では、ラムダ式も使用できるようになったため、使う頻度も減って来ているかもしれませんね。

匿名クラスの利用

匿名クラスを利用するには

ベースとなるクラス型 変数名 = new ベースとなるクラス(引数){
変数等
メソッド等
};
と定義します。

これを使用すれば、インターフェースや抽象クラスもそのままインスタンス化できます。

public class Test {
	public static void main(String[] args){
		Chara ch = new Chara(){
			public void move(){
				System.out.println("移動処理");
			}
		};
		ch.move();
	}
}
abstract class Chara{
	abstract void move();
}
実行結果

移動処理

匿名クラスの初期化処理

匿名クラスはコンストラクタでの初期化処理ができません。

インスタンス化した直後であれば、匿名クラス本体のインスタンスなので、自前で定義したメソッドを呼び出せます。

もし、匿名クラスで初期化処理をしたい場合は、この性質を利用するか、インスタンスイニシャライザを使用する方法が候補に挙がります。

public class Test {
	public static void main(String[] args){
		int hp = 100;
		Chara ch = new Chara(){
			int hp;
			int mp;
			public void view(){
				System.out.println("hp="+hp+":mp="+mp);
			}
			public Chara init(int hp){
				this.hp = hp;
				System.out.println("匿名クラスメソッドで初期化処理");
				return this;
			}
			{
				//インスタンスイニシャライザ
				System.out.println("インスタンスイニシャライザで初期化処理");
				mp = 200;
			}
		}.init(hp);//ここで初期化メソッドの呼び出し
		ch.view();
	}
}
abstract class Chara{
	abstract void view();
}

インスタンスイニシャライザで初期化処理
匿名クラスメソッドで初期化処理
p=100:mp=200

Java

Posted by nompor