익명 객체
익명 객체는 주로 특정 작업을 한 번만 수행할 필요가 있을 때 사용한다.
클래스가 재사용되지않고 특정위치에서만 사용된다면 익명 객체를 사용한다.
이때 부모클래스 변수는 이름없는 자식 객체를 참조하게된다.
부모클래스 [필드|변수] = new 부모클래스(){
};
1.일반적인 상속
다음은 일반적인 상속 방법이다.
자식 클래스 Child 를 만들어서 사용하였다.
그뒤 자식클래스를 사용할때 필드에서 new연산자를 통해 자식 객체가 부모타입 변수에 대입하게하였다.
package a16_Anonymous;
public class Parent {
void method(){}
}
//일반상속
class Child extends Parent{
@Override
void method() {}
}
class ClassA{
Parent parent = new Child();
}
2.익명객체 생성
하지만 자식 클래스가 재사용되지않고 특정 위치에서만 사용된다면 익명자식객체를 생성하여 사용할수있다.
이때 아래에서는 parent 변수에 이름없는 Parent의 자식객체를 생성하여 대입한다
2-1.필드 생성
ClassB의 필드영역에서 선언하였다.
package a16_Anonymous;
public class Parent {
void method(){}
}
class ClassB{
//필드선언
Parent parent = new Parent(){
@Override
void method(){}
};
}
2-2.로컬 생성
ClassB의 메소드영역에서 로컬변수로 선언되었다.
package a16_Anonymous;
public class Parent {
void method(){}
}
//익명
class ClassB{
//로컬
void method1(){
Parent parent1= new Parent(){
@Override
void method(){}
};
}
}
2-3.매개값
method2의 매개변수가 부모타입이고
매개값으로 익명 자식객체를 생성하여 대입하였다.
package a16_Anonymous;
public class Parent {
void method(){}
}
//익명
class ClassB{
//매개변수
void method2(Parent parent1){}
void method3(){
method2(new Parent(){
@Override
void method(){}
}
);
}
}
3.익명객체 외부사용
이때 익명 자식객체에서 새롭게 정의된 필드와 메소드는 외부에서 접근할수없고,
외부에서는 익명객체의 필드중 부모타입에서 선언된것만 접근할수있다.
//익명
class ClassB{
//필드선언
Parent parent = new Parent(){
void newmethod(){}
@Override
void method(){}
};
void method4(){
//새롭게 정의된 메소드 사용불가
//parent.newmethod();
//사용가능
parent.method();
}
4.익명 구현 객체
클래스때와 같이 인터페이스를 사용할때 구현 클래스가 재사용되지않고 특정위치에서만 사용될때 생성하여 사용한다.
4-1.일반적인 구현 객체생성
package a16_Anonymous;
public interface RemoteControl {
void TurnOn();
}
class TV implements RemoteControl{
@Override
public void TurnOn() {}
}
class ClassA{
RemoteControl remote= new TV();
}
4-2.익명 구현 객체 생성
package a16_Anonymous;
public interface RemoteControl {
void TurnOn();
}
class ClassA{
RemoteControl remote= new RemoteControl() {
@Override
public void TurnOn() {}
};
}
'Language > JAVA' 카테고리의 다른 글
[Java] 예외 클래스(Exception Class) (0) | 2024.05.20 |
---|---|
[Java] 중첩클래스 접근 제한 (0) | 2024.05.19 |
[Java] 중첩클래스 인스턴츠 멤버,정적,로컬 클래스 (0) | 2024.05.19 |