728x90
반응형
익명(anonymous)객체는 이름이 없는 객체 이다. 어떤 클래스를 상속하거나 인터페이스를 구련해야만 한다.
부모클래스를 상속해서 자식객체를 생성해서 변수에 담는다. -> 익명 자식 객체
(인터페이스는 생성자를 갖지않음) 새로운 객체는 {...} 구현되며 인터페이스 타입에 맞게 변수에 담는다. -> 익명 구현 객체
익명 자식 객체 생성
- 필드 선언할 때 초기값으로 익명 자식 객체를 생성하여 대입
- 메소드 내에서 로컬 변수 선언 시 초기값으로 익명 자식 객체를 생성해서 대입
- 메소드의 매개 변수가 부모 타입일 경우 메소드를 호출하는 코드에서 익명 자식 객체를 생성해서 매개값으로 대입
익명 자식 객체의 멤버 접근 제한
익명 자식 객체에 새롭게 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용되고, 외부에서는 접근할 수 없다.
익명자식 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있기 때문이다.
예시1) 익명 자식 객체 생성
부모클래스
public class Person {
void wake() {
System.out.println("7시에 인난다.");
}
}
익명 자식 객체 생성
public class Anonymous {
// 필드 초기값으로 대입
Person field = new Person() {
void work() {
System.out.println("출근");
}
@Override
void wake() {
System.out.println("6시에 인난다.");
work();
}
};
void method1() {
// 로컬 변수값으로 대입
Person localVar = new Person() {
void walk() {
System.out.println("산책 한다.");
}
@Override
void wake() {
System.out.println("7시에 인난다.");
walk();
}
};
// 로컬 변수 사용
localVar.wake();
}
void method2(Person person) {
person.wake();
}
}
익명 자식 객체 생성
public class AnonymousEx {
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();
}
});
}
}
※용어 정리
-
익명 자식 객체: 자식 클래스가 재사용되지 않고 오로지 특정 위치에서 사용할 경우라면 자식 클래스를 명시적으로 선언하지 않고 익명 자식 객체를 생성해서 사용한다.
부모클래스 [필드|변수] = new 부모클래스(매개값, ...){
//필드
//메소드
};
-
익명 구현 객체: 구현 클래스가 재사용 되지 않고 오로지 특정 위치에서 사용할 경우라면 익명 구현 객체를 생성해서 사용 한다.
인터페이스 [필드|변수] = new 인터페이스(){
//인터페이스에 선언된 추상 메소드의 실체 메소드 선언
//필드
//메소드
};
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 예외 클래스 (0) | 2020.12.02 |
---|---|
자바(Java) - 익명 객체2 (익명 구현 객체 생성) (0) | 2020.11.24 |
자바(Java) - 중첩 인터페이스 (0) | 2020.11.23 |
자바(Java) - 중첩 클래스의 접근 제한 (0) | 2020.11.23 |
자바(Java) - 중첩 클래스와 중첩 인터페이스 (0) | 2020.11.23 |