인사이트
[JAVA] 익명구현객체 본문
인터페이스에 메소드를 하나 선언해줬다
* 인터페이스의 메소드는 모두 추상메소드이다
public interface I {
public void print();
}
인터페이스를 구현하는 클래스를 따로 만들지 않고, 익명구현객체를 통해서 인터페이스를 객체로 만들었다.
그러면서 int num이라는 변수도 넣고, 메소드도 재정의해서 넣었다.
public class C {
public static void main(String[] args) {
I i = new I() {
int num = 1;
@Override
public void print() {
System.out.println("출력메소드");
}
};
i.print();
i.num = 10; // 불가함
}
}
Q1. 근데 I는 인터페이스가 아닌가? 어떻게 상수가 아닌데 들어갈 수 있는가?
A1. 클래스의 형식을 빌려 객체를 생성한거기 때문에 변수 선언이 가능하다.
(그렇다고 클래스인 것은 아니다)
Q2. i.num = 10은 왜 불가한가?
A2. I라는 익명구현객체를 i라는 변수에 넣었는데 그 타입을 살펴보면 I(인터페이스)이다. 내가 생성한 익명구현객체가 부모타입으로 자동 형 변환이 되었음을 알 수 있다. I에는 int num이라는 필드가 없기 때문에 사용할 수 없다.