프로그래밍 노트/JAVA

[JAVA] 익명객체_익명 자식 객체 생성

깡냉쓰 2019. 4. 15. 17:53
728x90
반응형

익명(anonymous) 객체는 이름이 없는 객체를 말한다.

익명 자식 객체 생성

기본적으로 사용하는 방식

class Child extends Parent { }

class A{
        Parent filed = new Child(); // 필드에 자식 객체를 대입
        void method(){
                Parent localVar = new Child(); // 로컬 변수에 자식 객체를 대입
        }
}

자식 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용할 경우라면 익명 자식 객체를 생성해서 초기값으로 대입하는 것이 좋은 방법이다.

부모클래스 [필드|변수] = new 부모클래스("매개값", "..."){
    // 필드
    // 메소드
};

Person.java

package anonymous;

public class Person {
    void wake(){
        System.out.println("7시 30분에 일어납니다.");
    }
}

Anonymous.java

package anonymous;

public class Anonymous {
    // 필드 초기값으로 대입
    Person field = new Person(){
          void work(){
              System.out.println("출근을 한다.");
          }

        @Override
        void wake() {
            System.out.println("6시에 일어납니다.");
            work();
        }
    };

    void method1(){
        // 로컬 변수값으로 대입
        Person localVer = new Person(){
            void walk(){
                System.out.println("산책합니다.");
            }

            @Override
            void wake() {
                System.out.println("7시에 일어납니다.");
                walk();
            }
        };
        // 로컬 변수 사용
        localVer.wake();
    }

    void method2(Person person){
        person.wake();
    }
}

AnonymousExample.java

package anonymous;

public class AnonymousExample {
    public static void main(String[] args) {
        Anonymous anony = new Anonymous();
        // 익명 객체 필드 사용
        anony.field.wake();
        // 익명 객체 로컬 변수 사용
        anony.method1();
        // 익명 객체 매개값 사용
        anony.method2(new Person(){
            void study(){
                System.out.println("공부합니다.");
            }

            @Override
            void wake() {
                System.out.println("8시에 일어납니다.");
                study();
            }
        });
    }
}

6시에 일어납니다.
출근을 한다.
7시에 일어납니다.
산책합니다.
8시에 일어납니다.
공부합니다.

728x90
반응형