4.1.12 super를 이용한 메서드 표현식
3장 인터페이스와 람다 표현식에서 메서드 표현식을 object::instanceMethod 형태로 사용할 수 있다고 배웠다. 이때 객체 참조 대신 super를 사용할 수도 있다. 다음 메서드 표현식은 this를 기준으로 주어진 메서드의 슈퍼클래스 버전을 호출한다.
super::instanceMethod
다음은 이 메커니즘을 보여 주려고 만든 예다.
public class Worker {
public void work() {
for (int i = 0; i < 100; i++) System.out.println("Working");
}
}
public class ConcurrentWorker extends Worker {
public void work() {
Thread t = new Thread(super::work);
t.start();
}
}
ConcurrentWorker의 work 메서드는 run 메서드에서 슈퍼클래스(Worker)의 work 메서드를 호출하는 Runnable로 스레드를 생성한다.