Javaの匿名クラスのサンプルです。
目次
匿名クラス
| //匿名クラス 変数の型 変数 = new クラス名/インターフェース名( ) { メソッドの処理を記述 }; |
| //普通のクラス 変数の型 変数 = new クラス名( ); |
- 匿名クラスは、後ろに波括弧( { } )が付いています。波括弧の中にメソッドの処理を記述します。
- 匿名クラスのnewの後ろは、既にあるクラスまたはインターフェースを指定していることになります。そのため、クラス名はないことになります。(=匿名クラス)
- 匿名クラスはクラスを継承またはインターフェースを実装してインスタンスを生成します。
- 1回限りの処理を行う時に使用します。
- 最後にセミコロン(;)が必要です。
- 無名クラスともいいます。
匿名クラスのサンプル(クラスを指定)
匿名クラスのサンプルです。
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,12行目は、匿名クラスです。
11行目のColor1は3行目のクラスを指していて継承しています。
13行目は、4~6行目のメソッドが実行されます。
匿名クラスのオーバーライドのサンプル
匿名クラスでオーバーライドを行うサンプルです。
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~16行目は、匿名クラスです。
11行目のColor1は3行目のクラスを指していて継承しています。
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() {
public void write2() {
System.out.println("黄");
}
};
// c1.write2();
}
}
11~15行目は、匿名クラスです。
11行目のColor1は3行目のクラスを指していて継承しています。
12行目は、3~7行目のクラスにないメソッドを追加しました。
16行目は、エラーになります。3~7行目のColor1クラスにwrite2メソッドはないためです。
匿名クラスのサンプル(インターフェースを指定)
匿名クラスのサンプルです。インターフェースを指定します。
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(); //青
}
}
9~14行目は、匿名クラスです。
9行目のColor1は3行目のインターフェースを指していて実装しています。
15行目は、メソッドを実行しています。
関連の記事
Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの継承のサンプル
Java ラムダ式のサンプル
Java ラムダ式で関数型インターフェースを使用するサンプル