추상 클래스는 이렇게 사용하는 형태가 일반적입니다. 그런데 익명 클래스는 자식 클래스인 MyAction을 만들지 않고, ActionExam 클래스에서 액션을 상속받은 익명 클래스를 만들어 사용할 수 있습니다.
package javaStudy; public class ActionExam { public static void main(String[] args) { Action action = new Action() { @Override public void exec() { // TODO Auto-generated method stub } }; } }
Action action = new Action(); 이런 코드가 가능할까요? 아닙니다. 이렇게 입력하면 컴파일 오류가 발생합니다. Action은 추상 클래스이고, 추상 클래스는 완전한 클래스가 아니므로 객체를 생성할 수 없기 때문입니다. 따라서 추상 클래스를 사용하기 위해서는 항상 추상 클래스를 상속받은 자식 클래스를 생성하고 사용한 것입니다. 앞에 나온 MyAction 예제처럼 말이죠. 그런데 MyAction 같은 클래스를 딱 한 번만 사용하는 경우가 있습니다. 일회용처럼 말이죠. 그럴 경우 이 클래스를 따로 정의하고 사용하는 것이 번거롭습니다. 이때 조금 편하게 클래스 정의와 동시에 객체를 생성하는 것이 바로 익명 클래스입니다.