2017-04-06 10 views
0

다음 코드에서 알 수 있듯이 RemoveDups_1.LinkedList linkedList = new RemoveDups_1.LinkedList();이라고 쓰면 정적 클래스 인 RemoveDups_1 내에 정적 클래스 LinkedList의 인스턴스를 가져올 수 있습니다. 정적 클래스이므로, LinkedList 클래스의 인스턴스를 가져 오는 데 new 키워드를 사용해야하는 이유는 무엇입니까?왜 'new'키워드를 사용하여 정적이 아닌 외부 클래스에서 정적 내부 클래스의 참조를 가져올 수 있습니까?

import java.util.*; 

public class RemoveDups_1{ 
    public static class LinkedList{ 

     static int i = 5; 

     class Node{ 
      int data; 
      Node next; 

      public Node(int data){ 
       this.data = data; 
      } 
     } 

     Node head; 

     public void appendToTail(int data){ 
      if(head == null){ 
       head = new Node(data); 
      } 
      else{ 
       Node node_to_append = new Node(data); 
       Node node = head; 
       while(node.next != null){ 
        node = node.next; 
       } 
       node.next = node_to_append; 
      } 
     } 
    } 



    public static void main(String[] args){ 

     RemoveDups_1 removeDups_1 = new RemoveDups_1(); 
     RemoveDups_1.LinkedList linkedList = new RemoveDups_1.LinkedList();  
     RemoveDups_1.LinkedList.Node node; 
     node = linkedList.new Node(3); 

     System.out.println(RemoveDups_1.LinkedList.i); 

    } 
} 
+0

그냥 정적 인 내부 클래스 (또는 심지어 모든 클래스)의 새 인스턴스에 대해 'new'할 필요가 없다고 생각하게 만드는 것이 궁금합니다. –

+0

Java에서 "정적 내부 클래스"라는 정의는 없습니다. –

답변

1

LinkedList의 당신은 그것의 외부 클래스의 인스턴스를 생성 할 필요없이 인스턴스화하기 위해 정적 할 필요 중첩 된 클래스입니다

+1

아니요, 내부 클래스가 아닌 * 중첩 클래스입니다. 정적 수정자를 가지지 않은 경우에만 내부 클래스가됩니다. –

+0

고맙다. 내 대답을 편집하겠다. –

0

"왜 우리는 인스턴스를 가져 오기위한 new 키워드를 사용해야합니까 LinkedList 클래스의? "

클래스의 인스턴스에 메모리를 할당하는 방법은 최상위 클래스인지, 중첩 클래스인지, 정적인지 내부인지에 관계 없기 때문입니다. 정적 중첩 클래스 멤버와 내부 클래스 멤버 간의 차이점은 외부 클래스의 인스턴스와 관련이 없으며 후자는 외부 클래스의 인스턴스와 관련이 없다는 점입니다.

+0

RemoveDups_1의 인스턴스가 만들어지면 RemoveDups_1의 정적 멤버이므로 LinkedList의 인스턴스가 자동으로 만들어지지 않습니까? '정적'이란 클래스가 초기화 될 때 정적 변수가 생성된다는 것을 의미하지 않습니까? 이것이 시나리오 일 경우 RemoveDups_1에서 'LinkedList'클래스의 인스턴스를 가져 오기 위해 'new'키워드를 사용해야하는 이유는 무엇입니까? '새'키워드가 LinkedList가 정적 클래스이기 때문에 모순되는 새 인스턴스를 만들지 않습니까? – Milin

+0

고려해 볼 때, 다음 메소드는 LinkedList의 2 개의 새 인스턴스를 생성하는 RemoveDups_1 클래스의 일부가 될 수 있습니다. 1. list_lesser 및 2. list_greater_or_equal. 그것은 고정되어 있기 때문에 단 하나의 LinkedList로되어 있지 않습니까? 'public static void run() { LinkedList list_lesser = 새로운 LinkedList(); \t \t LinkedList list_greater_or_equal = new LinkedList(); \t \t }' – Milin

+0

아니요, LinkedList의 인스턴스가 자동으로 생성되지 않습니다! 반원으로서 그것에 대한 언급은 없습니다. 유형 만 정의됩니다. 설명과 같이 인스턴스를 얻으려면'new' 키워드를 사용합니다. –