LoginSignup
0
1

More than 3 years have passed since last update.

匿名クラス(無名クラス)

Posted at

匿名クラスとは

その場一回だけしか使わないようなクラスを作る場合に用います。

普通はインターフェースを実装したクラスを宣言し、そのクラスのインスタンスを生成しメソッドを呼び出しますが、匿名クラスだとインターフェースの宣言とメソッドの利用を同時に行えます。

匿名クラスを利用しない場合

今回はoutputというメソッドを持つ自作インターフェースを用いました。

IPrint
public interface IPrint {
    void output();
}

IPrintインターフェースを実装したクラスを作り、メソッドに処理詳細を記述します。

PrintImpl
public class PrintImpl implements IPrint{

    @Override
    public void output() {
        System.out.println("aaa");
    }
}

実行クラスで呼び出します。

Main
public class Main {

    public static void main(String[] args) {

        IPrint ip = new PrintImpl();
        ip.output();//コンソールに"aaa"と出力される
    }
}

匿名クラスを利用した場合

インターフェースを実装したクラスを作らずに、実行クラスでIPrintのメソッドを利用することができます。

Main
public class Main {

    public static void main(String[] args) {

        IPrint ip = new IPrint() {
            @Override
            public void output() {
                System.out.println("aaa");
            }
        };
        ip.output();
    }
}

さらにラムダ式で行数を短縮できます。

Main
public class Main {

    public static void main(String[] args) {

        IPrint ip = () -> System.out.println("xxxx");

        ip.output(); // "xxxx"と出力される
    }
}

インターフェースにないメソッドを新たに追加する場合は、インスタンス生成時にインターフェース型の変数で受けません。

Main
public class Main3 {

    public static void main(String[] args) {

        new IPrint() {
            @Override
            public void output() {
                System.out.println("aaa");
            }

            public void output2() {
                System.out.println("bbb");
            }
        }.output2();
    }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1