익명클래스는 이름이 없는 inner 클래스이다. 클래스 정의와 동시에 객체를 생성할 수 있다. 부모 클래스를 상속하는 방식으로 정의한다.
익명클래스의 목적은 부모 클래스를 상속받는 서브 클래스를 생성하지 않고도, 단일 객체를 만들어서 부모 클래스에 정의된 동작에서 행위를 추가할 수 있다는 것이다.
interface Animal{
public void move();
}
public class AnonymouseInnerClassTest {
public static void main(String[] args) {
Animal s = new Animal(){ //익명클래스.
public void move() {
System.out.println("기어서 움직임.");
}
};
s.move();
Animal horse = new Animal() {
public void move() {
System.out.println("다그닥 다그닥 ");
}
};
horse.move();
}
}
/*인터페이스를 구현한 별도의 클래스를 만들지않고 바로 객체 생성할 때에 메소드를 오버라이딩 하여 사용하는 방법을
* ==> 이름없는 inner class (익명클래스)라고 한다.
* */
이처럼 부모클래스 Animal을 상속받아 오버라이드를 해, 굳이 클래스파일을 생성하지 않고 즉석에서 만들 수 있다. 하지만 익명클래스는 결국 부모클래스 인스턴스에 넣기 때문에 부모클래스에서 추상화하지 않는 메소드에 대해선 호출이 되지 않는다.