프로그램에서 일시적으로 사용되고 재사용되지 않는 객체에 대해서, 클래스를 모두 만들어준다면 코드가 복잡해지고 오히려 유지보수에 불리해질 수 있다. 따라서 이러한 경우 클래스를 별도로 만들어주지 않고 코드 내에서 익명클래스를 생성 및 정의하여 일회성으로 사용한다.
public class Basic{
void print(){
System.out.println("First Print");
}
}
public class Anony{
Basic tuning = new Basic(){
String mode = "tuning";
void print(){
System.out.println("Tuning Print");
}
void print2(){
System.out.println("Mode is"+mode);
}
};
//Basic형 변수 tuning에 익명 자식 객체를 담는다.
//mode와 print2()는 자식 객체 내에서는 사용될 수 있지만, 변수가 부모타입의 클래스이기 때문에 외부에서 사용 불가하다.
}
부모클래스를 상속한 익명 자식객체와 달리, 인터페이스를 구현하여 익명 클래스를 생성하는 것도 가능하다. 일반적인 상속과 달리 인터페이스는 무조건 메서드들을 구현해야 하기 때문에 규격화에 도움이 된다.
public class Button{
interface ListenerInterface{
void onClick();
}
ListenerInterface listener;
void setListenerInterface(ListenerInterface listener){
this.listener = listener;
}
void touch(){
listener.onClick();
}
}
public class ButtonHandler{
Button firstBtn = new Button();
Button secondBtn = new Button();
//인터페이스를 구현한 익명 객체
Button.OnClickListener listener = new Button.OnClickListener(){
@Override
public void onClick(){
System.out.println("second Button");
}
}
secondBtn.setListenerInterface(listener);
//매개변수로 익명 객체 바로 생성
firstBtn.setListenerInterface(new Button.OnClickListener(){
@Override
public void onClick(){
System.out.println("first Button");
}
});
}