버튼의 클릭 이벤트 처리
Button 클래스 정의
class Button {
static interface OnClickListener { //중첩 인터페이스 선언
void onClick();
}
OnClickListener listener; //인터페이스 타입 인스턴스 변수(필드) 선언
public void setOnClickListener(OnClickListener listener) {
// 매개변수의 다형성
this.listener = listener;
}
// => 외부에서 구현객체를 받아 필드에 대입
public void touch() {
listener.onClick(); // 구현 객체의 onClick() 메서드 호출
}
}
Button 2개를 가지고 있는 Window 클래스를 정의(가정)
class Window {
//버튼 2개 생성
Button button1 = new Button();
Button button2 = new Button();
// 필드 초기값을 대입
// => 필드 초기값으로 익명 구현객체를 대입
Button.OnClickListener listener = new Button.OnClickListener() {
@Override
public void onClick() {
System.out.println("전화를 겁니다");
}
};
// 생성자 정의
public Window() {
button1.setOnClickListener(listener);
button2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick() {
System.out.println("메세지를 보냅니다");
}
});
}
}
Window w = new Window();
w.button1.touch();
w.button2.touch();
전화를 겁니다 메세지를 보냅니다
CheckBox 클래스 정의
select() 메서드가 호출되면 "배경을 변경합니다!" 가 출력
class CheckBox {
// - 정적 내부 인터페이스 OnSelectListener 정의
static interface OnSelectListner {
void onSelect();
}
// - OnSelectListener 타입의 인스턴스 변수를 선언
OnSelectListner listener;
// SetOnSelectListener 메서드를 정의. 이 때 매개변수로 인터페이스 타입 지정
public void setOnSelectListener(OnSelectListner listener) {
this.listener = listener;
}
public void select() {
listener.onSelect();
}
}
// CheckBox 객체 생성
CheckBox checkBox = new CheckBox();
// setOnSelectLinstener 호출, 이 때 매개변수로 익명 구현 객체를 사용
checkBox.setOnSelectListener(new CheckBox.OnSelectListner() {
@Override
public void onSelect() {
System.out.println("배경을 변경합니다!");
}
});
// select() 메서드 호출
checkBox.select();
'JAVA' 카테고리의 다른 글
[JAVA] 람다식(Lambda Expressions) (0) | 2023.11.15 |
---|---|
[JAVA] 익명(anonymous) 객체 (4) (1) | 2023.11.14 |
[JAVA] 익명(anonymous) 객체 (2) (0) | 2023.11.14 |
[JAVA] 익명(anonymous) 객체 (1) (1) | 2023.11.14 |
[JAVA] 제네릭(Generic, 일반화) - 2 (1) | 2023.10.31 |