안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
구현 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용하는 경우라면
익명 구현 객체를 초기값으로 대입하는 것이 좋습니다.
인터페이스 [필드|변수] = new 인터페이스() {
//인터페이스에 선언된 추상 메서드의 실체 메서드 선언
//필드
//메서드
//필드와 메서드는 실체 메서드에서만 사용이 가능하고 외부에서는 사용하지 못합니다.
};
필드를 선언할 때 초기값으로 익명 구현 객체를 생성해서 대입하는 코드.
class A{
AAA aaa = new AAA() { // 클래스 A 의 필드 선언
@Override AAA 인터페이스의 추상 메서드에 대한 실체 메서드
void aa(){ }
};
}
메서드 내에서 로컬 변수를 선언하고 초기값으로 익명 구현 객체를 생성해서 대입하는 코드.
void method() {
AAA localAaa = new AAA () { // 로컬 변수 선언
@Override // AAA 인터페이스의 추상메서드의 실체 메서드
void aa() { }
};
}
메서드의 매개 변수가 인터페이스 타입일 경우, 메서드 호출 코드에서 익명 구현 객체를 생성해서 매개값으로 대입할 수도 있습니다.
class A {
void method1(AAA aaa) { }
void method2() {
method1( // method1() 메서드 호출
new AAA() {
@Override // method1()의 매개값으로 익명 구현 객체를 대입
void aa(){ }
);
}
}
예제로 보겠습니다.
인터페이스
public interface RemoteControl {
public void turnOn();
public void turnOff();
}
익명 구현 클래스와 객체 생성
public class Anonymous {
//필드 초기값으로 대입
RemoteControl field = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("TV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("TV를 끕니다.");
}
};
void method1() {
//로컬변수값으로 대입
RemoteControl localVar = new RemoteControl() {
@Override
public void turnOn() {
System.out.println("Audio를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("Audio를 끕니다.");
}
};
//로컬변수 사용
localVar.turnOn();
}
void method2(RemoteControl rc) {
rc.turnOn();
}
}
실행 클래스
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
//익명 객체 필드 사용
anony.field.turnOn();
//익명 객체 로컬변수 사용
anony.method1();
//익명 객체 매개값 사용
anony.method2(
new RemoteControl() {
@Override
public void turnOn() {
System.out.println("SmartTV를 켭니다.");
}
@Override
public void turnOff() {
System.out.println("SmartTV를 끕니다.");
}
}
);
}
}
'자바' 카테고리의 다른 글
JAVA 자바 예외처리 예외와 예외 클래스 (0) | 2017.03.13 |
---|---|
JAVA 자바 익명 객체의 로컬 변수 사용 (0) | 2017.03.13 |
JAVA 자바 : 익명 자식 객체 생성 (0) | 2017.03.13 |
JAVA 자바 중첩 인터페이스 Interface (0) | 2017.03.13 |
JAVA 자바 중첩 클래스: 중첩 클래스의 접근 제한 - 로컬 클래스에서 사용 제한 / 중첩 클래스에서 바깥 클래스 참조 얻기 (0) | 2017.03.13 |