2017-04-06 7 views
0

次のコードからわかるように、私たちは非静的クラスRemoveDups_1内静的クラスのLinkedListのインスタンスを取得するためにRemoveDups_1.LinkedList linkedList = new RemoveDups_1.LinkedList();を書きます。これは静的クラスなので、クラスLinkedListのインスタンスを取得するために新しいキーワードを使用する必要があるのはなぜですか?static以外の外部クラス内の静的内部クラスの参照を取得するには、なぜ '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

いいえ、内部クラスではありません*ネストされたクラスです。静的修飾子を持たないのは内部クラスだけです。それはRemoveDups_1の静的メンバであるよう –

+0

は、それが自動的にLinkedListのインスタンスを作成していない、RemoveDups_1のインスタンスが作成されている場合は、あなたに感謝し、私は私の答え –

0

「なぜ私たちは、インスタンスを取得するためnewキーワードを使用する必要がありますクラスLinkedListの?

それはあなたが関係なく、それはトップレベルまたは入れ子になったクラスだかどうかの、静的または内部、クラスのインスタンスにメモリを割り当てる方法ですので。静的ネストされたクラスメンバーと内部クラスメンバーの違いは、前者が外部クラスのインスタンスに関連付けられておらず、後者が外部クラスのインスタンスに関連付けられていないことです。

+0

を編集することを知りませんでしたか? 「静的」とは、クラスが初期化されたときに静的変数が作成されるということですか?これがシナリオである場合、なぜRemoveDups_1内の 'LinkedList'クラスのインスタンスを取得するために 'new'キーワードを使用する必要がありますか? LinkedListは静的なクラスなので、ここでは矛盾する新しいインスタンスを 'new'キーワードで作成しませんか? – Milin

+0

考慮のため、次のメソッドは、LinkedListの2つの新しいインスタンスを作成するRemoveDups_1クラスの一部である可能性があります。 1. list_lesserおよび2. list_greater_or_equal。それは静的なので、1つのLinkedListのみであるはずですか? 'パブリック静的ボイドラン(){ LinkedListのlist_lesser =新しいLinkedListの()。 \t \t LinkedListのlist_greater_or_equal =新しいLinkedListの()。 \t \t } ' – Milin

+0

いいえ、' LinkedList'のインスタンスは自動的に作成されません!クラスメンバーとしての参照はありません。型だけが定義されています。説明するように、インスタンスを取得するには 'new'キーワードを使います。 –

関連する問題