상속의 경우 하나의 클래스 파일을 만들어 사용해야한다. 여러 곳에서 객체를 만들어 사용을 원할 시에 생성자로 호출할 수 있기 때문이다. 하지만 클래스의 이름 없이 일회성으로 상속받는 클래스가 있는데 이것을 익명(aninymous) 객체라고 한다. 특정 위치에서만 사용하며 재사용을 원하지 않을 시에 사용하기 좋은 방법이다.
익명 자식 개체 생성 방법
연습을 위한 Parent 클래스 생성
public class Parent {
void parentMethod() {};
}
필드 선언 시 초기값으로 익명 자식 객체 생성
public class A {
Parent field = new Parent() {
int childField;
void childrenMethod(){};
@Override
void parentMethod(){};
};
}
메소드 내에서 로컬 변수 선언 시 초기값으로 익명 자식 객체 생성
public class A {
void method() { //메소드
로컬 변수 선언
Parent localvar = new Parent() {
int childField;
void childrenMethod(){};
@Override
void parentMethod(){};
};
}
}
매개 변수에 익명 자식 객체 생성
public class A {
void method1(Parent parent) {};
void method2() {
method1(new Parent() {
int childField;
void childMethod(){};
@Override
void parentMethod(){};
});
};
}
익명 자식 객체에서 정의된 필드와 메소드는 익명 자식 객체 내부에서만 사용이 가능하다.
사용법
부모 클래스
public class Person {
void wake() {
System.out.println("7시 기상");
}
}
public class Anonymous {
1. 필드 초기값으로 대입
Person filed = new Person() {
void work() {
System.out.println("출근하기");
}
@Override
void wake(){
System.out.println("6시 기상");
}
};
2. 로컬 변수값으로 대입
void method1(){
Person localVar = new Person(){
void workout() {
System.out.println("운동하기");
}
@Override
void wake() {
System.out.println("8시 기상");
}
};
localVar.wake();
}
3. 매개값 사용을 위한 메소드 선언
void method2(Person person) {
person.wake();
}
}
사용
public class HelloWorld {
public static void main(String[] args) {
Anonymous anonymous = new Anonymous(); //객체 생성
1. 필드 초기값으로 호출
anonymous.filed.wake();
2. 로컬 변수로 호출
anonymous.method1();
3. 매개변수로 호출
anonymous.method2(new Person(){
void study() {
System.out.println("공부하기");
};
@Override
void wake(){
System.out.println("5시 기상");
study();
}
});
}
}
익명 구현 개체 생성 방법
구현 클래스가 재사용되지 않고 특정 위치에서 사용하는 경우 익명 구현 객체를 생성하는 것이 편하다.
사용법
인터페이스
public interface Person {
public void behavior();
public void wake();
}
public class Anonymous {
1. 필드 초기값 대입
Person walk = new Person() {
@Override
public void behavior() {
System.out.println("산책");
}
@Override
public void wake() {
System.out.println("6시 기상");
}
};
2. 로컬 변수값으로 대입
void work() {
Person field = new Person() {
@Override
public void behavior() {
System.out.println("출근");
}
@Override
public void wake() {
System.out.println("5시 기상");
}
};
field.wake();
field.behavior();
}
3. 매개값 사용을 위한 메소드 선언
void weekend(Person person){
person.wake();
person.behavior();
}
}
public class HelloWorld {
public static void main(String[] args) {
Anonymous anonymous = new Anonymous(); //객체 생성
1. 필드 사용
anonymous.walk.wake();
anonymous.walk.behavior();
2. 로컬 변수 사용
anonymous.work();
3. 매개값 사용
anonymous.weekend(new Person() {
@Override
public void behavior() {
System.out.println("주말");
}
@Override
public void wake() {
System.out.println("10시 기상");
}
});
}
}
'JAVA' 카테고리의 다른 글
15. java.lang에 대하여 (0) | 2023.11.15 |
---|---|
14. Object 클래스(hashcode() 및 equals()) (0) | 2023.11.15 |
12. 중첩 클래스 및 인터페이스 (0) | 2023.11.10 |
11. 추상 클래스와 인터페이스의 차이 (0) | 2023.11.09 |
10. 인터페이스 (0) | 2023.11.09 |