Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

인사이트

[JAVA] 익명구현객체 본문

카테고리 없음

[JAVA] 익명구현객체

쿰쿵 2021. 6. 16. 17:25

인터페이스에 메소드를 하나 선언해줬다

* 인터페이스의 메소드는 모두 추상메소드이다

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이라는 필드가 없기 때문에 사용할 수 없다.