이너클래스 - 2. 익명이너클래스(Anonymous class)

Ⅱ. 익명이너클래스(Anonymous class)

1. 익명 이너클래스 ← 익명(이름을 알 수 없음) + 이너클래스

 - 인터페이스의 객체를 별도로 생성하지 않고 사용가능

 - 내부적으로만 호출 가능

// Example
//인터페이스를 상속한 이너클래스를 생성하여 인터페이스 객체 생성
package sample;

class A {
	C c = new B();	
	void abc() {
		c.bcd();
	}	
	class B implements C {
		public void bcd() {
			System.out.println("인스턴스 이너클래스");			
		}
	}
}
interface C {
	public abstract void bcd();
}

public class Main {
	public static void main(String[] args) {
		// 1. 객체 생성 및 메소드 호출
		A a = new A();
		a.abc();	// 인스턴스 이너클래스
	}
}

 

2. 익명 이너클래스 ← 익명(이름을 알 수 없음) + 인스턴스이너클래스

 - 익명이너클래스를 사용하는 경우, 이름이 없어 한번에 객체를 2개 이상 생성 불가능

// Example1
package sample;

class Boy {
	void sayHello() {
		System.out.println("안녕하세요");
	}
}

public class Main {

	public static void main(String[] args) {
		// 일회성으로 정의해서 객체를 만드는 익명클래스
		Boy a = new Boy() {
			void sayHello() {
				System.out.println("반가워요");
			}
		};
		a.sayHello();	// 반가워요
	}

}
// Example2
package sample;

interface Car {
	public abstract void drive();
}

class CarCenter {
	Car morning = new Car() {
		public void drive() {
			System.out.println("200km 질주");
		}
	};
	void goMorning() {
		morning.drive();
	}
}

public class Main {
	public static void main(String[] args) {
		new CarCenter().goMorning();	// 200km 질주
	}
}