うえしまさんの備忘録

うえしまさんの活動の備忘録をここに淡々と書いていきます。

Javaに関するメモ「内部クラス」

内部クラスの特徴

  • 内部クラスはメンバ変数、メソッドなどと同じように、クラスの構成要素の一つです。そのため、private、protected、publicといったアクセスレベルを付与することができます。
  • 内部クラスから同じクラス内のメンバ変数、メソッドを参照することができます。メンバ変数、メソッドにprivateアクセスレベルが付与されている場合でも、同じクラス内のため参照することができます。
  • メソッド内に内部クラスを宣言することもできます。その場合、その内部クラスはメソッド内でのみ機能します。同じクラスのメンバ変数、メソッドを参照することはできません。
  • メソッド内に内部クラスを宣言した場合、内部クラスからメソッド内のローカル変数を参照することができます。ただし、参照できるローカル変数はfinal修飾子が付与されている場合のみです。

書き方

  • new 抽象クラス型( ) { 無名クラス };
  • new インタフェース型( ) { 無名クラス };

サンプルソース

今回はWicketのクラスの中にあったのでこんなメモを書いた。継承とかオーバーライドとかは特に今回は関係ありません。

package sample;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.form.Form;

public class HelloWorld extends WebPage{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
//無名クラス?抽象クラスみたいなもの
	private Form form = new Form("f"){
		private static final long serialVersionUID = -1700095884500348972L;
		
		@Override
		protected void onSubmit(){
			ResultPage result = new ResultPage();
			setResponsePage(result);
		}
	};//無名クラスの終わり
	private Label a = new Label("message","うんち");
	
	public HelloWorld(final PageParameters parameters){
		//add(new Label("test","Hello World"));
		add(form);
		form.add(a);
	}

}

感想

無名クラスのよさがわからない。何がいいんだろ。先輩に聞いてみよ。