匿名クラスとは
その場一回だけしか使わないようなクラスを作る場合に用います。
普通はインターフェースを実装したクラスを宣言し、そのクラスのインスタンスを生成しメソッドを呼び出しますが、匿名クラスだとインターフェースの宣言とメソッドの利用を同時に行えます。
匿名クラスを利用しない場合
今回は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();
}
}