Java 静态嵌套类与非静态错误?
我使用了下面的一段代码,它在指定的点上给了我一个错误:Java 静态嵌套类与非静态错误?,java,class,static,nested,Java,Class,Static,Nested,我使用了下面的一段代码,它在指定的点上给了我一个错误: class LinkedList{ class pair{ Integer petrol; Integer distance; public pair (Integer a, Integer b){ petrol = a; distance = b; }
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中,
pair
是LinkedList
的成员。这意味着您只能通过LinkedList访问pair,而不是像该类的任何变量或方法那样直接访问pair
是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员
要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
然而,在案例2中,pair就像任何其他顶级类一样,只是分组以维护关系。它根本不是外阶级的成员。您可以直接访问它
注意:与任何其他顶级类一样,A与其外部类(和其他类)的实例成员进行交互。实际上,静态嵌套类在行为上是一个顶级类,为了便于打包而嵌套在另一个顶级类中
如果没有static关键字,
pair
将成为LinkedList
的内部类,这意味着每个pair
对象必须与封闭的LinkedList
类的实例相关联。