1번 문제
익명 자식객체 생성 연습해보기
- 익명 자식객체 선언 : 부모클래스 변수명 = new 부모클래스(){필드, 메소드 또는 부모 클래스 메소드 오버라이딩}
- 익명 구현객체 선언 : 인터페이스 변수명 = new 인터페이스(){생성자x 필드, 메소드 선언가능하나 모든 추상메소드 구현메소드 선언 해야함}
public class App {
public static void main(String[] args){
Anonymous anony = new Anonymous();
anony.field.start();
anony.method1();
anony.method2(new Worker(){
public void start(){
System.out.println("테스트를 합니다.");
}
});
}
}
class Worker {
public void start(){
System.out.println("쉬고 있습니다.");
}
}
class Anonymous{
Worker field = new Worker(){
public void start(){
System.out.println("디자인을 합니다.");
}
};
void method1(){
Worker localVar = new Worker(){
public void start(){
System.out.println("개발을 합니다.");
}
};
localVar.start();
}
void method2(Worker worker){
worker.start();
}
}
- 필드, 로컬변수의 초기값과 메소드의 매개값으로 익명 자식 객체를 만들어 각 구현함
2번 문제
익명 구현객체 생성 연습
*Anonymous에 static처리를 해주지 않으니 컴파일 오류가 난다. 패키지안에 각 클래스를
구별하지 않아 나는 문제일까? public, private, static등.. 다시 한 번 유효범위에 대해 공부해야겠다.
public class App {
public static void main(String[] args){
Anonymous anony = new Anonymous();
anony.field.run();
anony.method1();
anony.method2(new Vehicle(){
public void run(){
System.out.println("트럭이 달립니다.");
}
}
);
}
interface Vehicle{
public void run();
}
static class Anonymous {
Vehicle field = new Vehicle(){
public void run(){
System.out.println("자전거가 달립니다.");
}
};
void method1(){
Vehicle localVar = new Vehicle() {
public void run(){
System.out.println("승용차가 달립니다");
}
};
localVar.run();
}
void method2(Vehicle v){
v.run();
}
}
}
3번 문제
익명 구현 객체로 선택 이벤트 각각 처리하기.
public class App {
public static void main(String[] args){
CheckBox checkBox = new CheckBox();
checkBox.setOnSelectListener(new CheckBox.OnSelectListener(){
public void onSelect(){
System.out.println("배경을 변경합니다.");
}
});
checkBox.select();
}
}
class CheckBox{
OnSelectListener listener;
void setOnSelectListener(OnSelectListener listener){
this.listener = listener;
}
void select(){
listener.onSelect();
}
static interface OnSelectListener{
void onSelect();
}
}
setOnSelectListener 매개변수로 중첩 인터페이스의 익명 구현객체를 넣을 때,
static interface인 경우로 new 부모클래스.중첩인터페이스() 와 같이 써주었다.
맞는 방법인진 모르겠지만... 새로웠음!
setOnSelectListener(new CheckBox.OnSelectListener(){
public void onSelect(){
System.out.println("배경을 변경합니다.");
}
});
'Back-end > Java' 카테고리의 다른 글
[Java] 예외와 예외 처리 (0) | 2022.10.06 |
---|---|
[Java] 혼자 공부하는 자바 421~423p 풀어보기 (0) | 2022.10.04 |
[Java] 혼자 공부하는 자바 403p 풀어보기 (0) | 2022.09.22 |
[Java] 혼자 공부하는 자바 385p 풀어보기 (0) | 2022.09.20 |
[Java] 혼자 공부하는 자바 285p 풀어보기 (0) | 2022.09.15 |
댓글