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); } }
感想
無名クラスのよさがわからない。何がいいんだろ。先輩に聞いてみよ。