삶 가운데 남긴 기록 AACII.TISTORY.COM
익명 객체 본문
익명 객체
익명 객체는 이름이 없는 객체를 말합니다.
단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야 생성할 수 있습니다.
보통 UI이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 활용합니다.
public class Person {
void wake() {
System.out.println("일어납니다.");
}
}
public class Anonymous {
Person field = new Person() {
void work() {
System.out.println("출근합니다.");
}
void wake() {
System.out.println("6시에 일어납니다.");
work();
}
};
void method1() {
Person localVar = new Person() {
void walk() {
System.out.println("걸어갑니다.");
}
void wake() {
System.out.println("7시에 일어납니다.");
}
};
localVar.wake();
}
void method2(Person person) {
person.wake();
}
}
public class AnonymousEx {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
//익명 객체 필드 사용
anony.field.wake();
//익명 객체 로컬 변수 사용
anony.method1();
//익명 객체 인수 사용
anony.method2(new Person() {
void study() {
System.out.println("공부합니다.");
}
void wake() {
System.out.println("8시에 일어납니다.");
study();
}
});
}
}
실행결과
6시에 일어납니다.
출근합니다.
7시에 일어납니다.
8시에 일어납니다.
공부합니다.
인터페이스 구현 익명 객체
public interface RemoteControl2 {
public void turnOn();
public void turnOff();
}
public class Anonymous2 {
RemoteControl2 field = new RemoteControl2() {
@Override
public void turnOn() {
System.out.println("켭니다.");
}
@Override
public void turnOff() {
System.out.println("끕니다.");
}
};
void method1() {
RemoteControl2 localVar = new RemoteControl2() {
@Override
public void turnOn() {
System.out.println("오디오를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("오디오를 끕니다.");
}
};
localVar.turnOn();
}
void method2(RemoteControl2 rc) {
rc.turnOn();
}
}
public class AnonymousEx2 {
public static void main(String[] args) {
Anonymous2 anony = new Anonymous2();
anony.field.turnOn();
anony.method1();
anony.method2(new RemoteControl2() {
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
});
}
}
실행 결과
켭니다.
오디오를 켭니다.
TV를 켭니다.
728x90
'DEV&OPS > Java' 카테고리의 다른 글
자바 API , Object 클래스 (0) | 2022.04.07 |
---|---|
예외 처리 (0) | 2022.04.06 |
중첩 클래스 중첩 인터페이스 (0) | 2022.04.05 |
추상 클래스와 인터페이스 (0) | 2022.03.31 |
자바 클래스와 메서드 (0) | 2022.03.28 |