2014-09-29 2 views
1

다음 문장에 따라배열 크기가 java와 관련이 없습니까?

하위 클래스 배열은 수퍼 클래스 배열에 할당 될 수 있습니다. 구현 클래스의 배열은 인터페이스 유형의 배열에 할당 될 수 있습니다. 크기는 부적합합니다. 내가 객체 [null,null,null,null,null,null]이 유형 class [LC이 객체에 c 점으로 작성되는, new C[6]; 말할 때

나는 배열

interface I{} 
class C implements I{} 

/* dummy.java*/ 
public class dummy{ 
    public static void main(String[] args){ 
     C[] c = new C[6]; 
     I[] i = new I[2]; 
     c[0] = new C(); 
     c[1] = new C(); 
     c[2] = new C(); 
     c[3] = new C(); 
     c[4] = new C(); 
     c[5] = new C(); 
     i = c; 
     System.out.println(i[5].getClass()); 
    } 
} 

의 크기의 동작을 확인하기 위해 샘플 코드 아래 썼다. 내가 말할 때, new I[2];, [null,null] 객체는 class [LI 유형으로 생성되고 i은이 객체를 가리킨다.

내 질문 : 내가 i[5]을 말할 때

방법 인터페이스 배열 객체 [null, null]에도 불구하고, 여기 노력이 new I[2]을 정의한 후 생성되는? 내가 정확하게 i = c;라고 할 때 무슨 일이 일어나고있는 것입니까? 인터페이스 배열 배열의 크기가 할당 중에 변경되는 new I[2];입니까 i = c;?

+0

당신이 말할 때 'I = C를,'새'의 원래 배열 I [2] '가 폐기되고있다. – rwong

답변

4

인용문에서 말하고자하는 것은 배열의 크기가 객체의 일부라는 것입니다. 참조 또는 변수 유형의 일부가 아닙니다.

i = c; 

에서

당신은 ic에서 개최 된 참조의 값의 사본을 할당한다. 즉, ic과 동일한 인스턴스를 참조합니다.

인터페이스 배열의 크기가 새로운 것 [2]; 과제 도중 수정 됨 i = c ;?

아니요, 요점입니다. ic은 변수입니다. 변수 할당에는 부작용이 없습니다.

+0

아, 배열의 크기는 객체의 일부입니다. 나는있어. – overexchange

+0

그래서 우리는'Object o = c;'라고 말할 수 있습니다. 크기는 중요하지 않으므로'class [LC]는'class Object'의 하위 클래스입니다. 그 맞습니까? – overexchange

+0

@overexchange 예. 상태는 객체의 일부입니다. 그것은 참조 할당에서 절대적으로 아무런 역할을하지 않습니다. –

0

당신이 당신은 내가 C에 의해 생성 된 객체를 가리 키도록 설정하는 i=c

설정합니다. 따라서, i 지금

그래서이 ... i[1] = new I(); c[1] 가 반환됩니다 C[6]; <이 배열을 가리 것이다 I object

관련 문제