【Java】無名(匿名)クラスとは - 使い方など紹介
- 作成日:2022/01/20
初心者向けに無名クラスについて解説します。
無名クラスの使い方
無名クラスとは、その名の通り名前を持たないクラスです。 通常のクラスは使いまわすことができるのに対して、 無名クラスはその場限りの一時的なクラスです。
サンプルを見てみましょう。まずは通常クラスでインターフェースを実装する場合です。
//インターフェースの宣言
interface Inter{
void out();
}
//インターフェースを継承したクラス
class SampleClass implements Inter{
public void out(){
System.out.println("sample");
};
}
public class App {
public static void main(String[] args) {
//クラスの型
SampleClass tmp1 = new SampleClass();
tmp1.out();
}
}
インターフェースで宣言したout関数を使うために、SampleClassクラスを用意しています。 SampleClassクラスを他の箇所でも使うのならばこれで良いでしょう。
しかし、SampleClassクラスを1度しか使わない場合、わざわざクラス宣言するのは面倒なので、 無名クラスを使って書くと次のように書くこともできます。
//インターフェースの宣言
interface Inter{
void out();
}
public class App {
public static void main(String[] args) {
//無名クラスの宣言
Inter tmp = new Inter(){
public void out(){
System.out.println("sample");
}
};
tmp.out();
}
}
11~15行目で無名クラスを作成しています。 通常、インターフェースを実装する場合は、クラスを用意して継承して使いますが、それをこのように簡易的に書くことができます。
無名クラスは1度使ったら終わりなので、再利用する予定がないクラスを作るときによく使われます。
さらに、newした変数を使う予定がなく、メソッドを1回しか実行する予定がなければ、newしたインスタンスを代入する必要もありません。 なので、次のように省略できます。
//インターフェースの宣言
interface Inter{
void out();
}
public class App {
public static void main(String[] args) {
//無名クラスの宣言
new Inter(){
public void out(){
System.out.println("sample");
}
}.out();
}
}
11行目に注目してください。今まではnewしたインスタンスを変数に代入していましたが、それがありません。 インスタンスを再利用する予定がなければこのように書くこともできるのです。
今回はインターフェースを例にしましたが、クラスでも同様に無名関数を使うことができます。 その場合、無名クラスはnewしたクラスを継承したクラスとなります。