我使用了下面这段代码,在指出的地方给了我一个错误:
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类型的封闭实例限定分配。
答案 0 :(得分:3)
在案例1中,pair
是LinkedList
的成员。这意味着您只能通过LinkedList访问对,而不是像该类的任何变量或方法那样直接访问。
nested class是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员。
要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
但是在案例2中,pair就像任何其他顶级类一样,只是分组以保持关系。它根本不是外类的成员。您可以直接访问它。
注意:static nested class与其他类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。