2017-07-27 19 views
2

私が示された時点で、私にエラーを与えた以下のコードを使用:静的なネストされたクラスと非静的なエラー

class LinkedList{ 
    class pair{ 
      Integer petrol; 
      Integer distance; 

      public pair (Integer a, Integer b){ 
        petrol = a; 
        distance = b; 
      } 
    } 

    public static void main(String args[]){ 
      pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; // error at first element of array circle!!!!!!! 
    } 
} 

私はこれにそれを整流し、エラーがdissapeared!

class LinkedList{ 
    static class pair{ // changed to static!!! 
     Integer petrol; 
     Integer distance; 

     public pair (Integer a, Integer b){ 
      petrol = a; 
      distance = b; 
     } 
    } 

    public static void main(String args[]){ 
     pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; //error gone! 
    } 
} 

なぜ私の質問が最初に現れたのですか?ケース1、pairにおいて

ERROR: No enclosing instance of type LinkedList is accessible. Must qualify the allocation with an enclosing instance of type LinkedList.

+8

静的キーワードがない場合、 'pair'は' LinkedList'の内部クラスになります。つまり、 'pair'オブジェクトは、' LinkedList'クラスのインスタンスに関連付けられている必要があります。 – Eran

答えて

3

LinkedListのメンバーです。 LinkedListのみでペアにアクセスでき、そのクラスの任意のメソッドやメソッドと同じように直接アクセスすることはできません。

A nested class is a member of its enclosing class. Non-static nested classes (inner classes) have access to other members of the enclosing class, even if they are declared private. Static nested classes do not have access to other members of the enclosing class.

内部クラスをインスタンス化するには、まず外部クラスをインスタンス化する必要があります。次に、この構文を使用して外部オブジェクト内の内部オブジェクトを作成する:ケース2内しかし

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

、ペアはただの別のトップレベルクラスのようなものであるとだけ関係を維持するようにグループ化されました。それはまったく外のクラスのメンバーではありません。あなたはそれに直接アクセスすることができます。

Note: A static nested class interacts with the instance members of its outer class (and other classes) just like any other top-level class. In effect, a static nested class is behaviorally a top-level class that has been nested in another top-level class for packaging convenience.

関連する問題