MapleStory Finger Point
본문 바로가기
Back-end/Java

[Java] 혼자 공부하는 자바 438~441p 풀어보기

by 디팔⸜( ◜࿁◝ )⸝︎︎ 2022. 10. 5.

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("배경을 변경합니다.");
            }
        });

 

 

댓글