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行目は、メソッドを実行しています。
関連の記事