静态嵌套类vs非静态错误?

时间:2017-07-27 09:55:36

标签: java class static nested

我使用了下面这段代码,在指出的地方给了我一个错误:

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!!!!!!!
    }
}

然后我纠正了它,错误消失了!

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!
    }
}

我的问题是为什么错误甚至出现在第一位?

  

错误:无法访问LinkedList类型的封闭实例。必须   使用LinkedList类型的封闭实例限定分配。

1 个答案:

答案 0 :(得分:3)

在案例1中,pairLinkedList的成员。这意味着您只能通过LinkedList访问对,而不是像该类的任何变量或方法那样直接访问。

  

nested class是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。

要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

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

但是在案例2中,pair就像任何其他顶级类一样,只是分组以保持关系。它根本不是外类的成员。您可以直接访问它。

  

注意:static nested class与其他类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。