我是Java的新手,从Oracle Java教程学习Java。 我现在正在学习嵌套类,静态类和内部类。 我发现以下解释似乎很奇怪,我认为这是错误的。
从: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
嵌套类是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。 静态嵌套类无权访问封闭类的其他成员
最后一句“静态嵌套类无法访问封闭类的其他成员”很奇怪,但可能引用实例成员,说静态类就像一个静态方法,无法访问实例变量。 但下一个注意事项甚至更奇怪:
注意: 静态嵌套类与其实例成员交互 外层阶级 (和其他课程) 就像任何其他顶级课程一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。
这看起来很奇怪,因为它意味着静态类无法访问外部类的私有实例成员。我编写了以下编译和运行的代码,并演示了静态类可以访问外部实例私有变量。
public class A {
private int x;
static private int y;
static public class B{
static void doSomething(){
y++;
System.out.println("y is now " + y );
}
static void doSomethingElse(A a)
{
a.x++;
System.out.println("a.x is " + a.x );
}
}
}
// ------
public class Main {
public static void main(String[] args){
A a = new A();
A.B b = new A.B();
b.doSomething();
b.doSomethingElse(a);
}
}
这是教程中的错误,还是我可能不理解某些内容? 谢谢