为什么嵌套类的私有成员可以被封闭类的方法访问?


问题内容

谁能告诉我私人会员的访问级别?我一直对这段代码感到困惑:为什么可以在外部类的“打印”方法中访问Line类的私有成员k?

public class myClass {
    public static class Line{
        private double k;
        private double b;
        private boolean isVertical;

        public Line(double k, double b, boolean isVertical){
            this.k = k;
            this.b = b;
            this.isVertical = isVertical;
        }

    }

    public static boolean print(Line line){
        System.out.println(line.k);
    }
}

问题答案:

规则在有关可访问性JLS章中

否则,如果声明了成员或构造函数private,则仅当访问发生 在封装成员或构造函数的声明的顶级类(第7.6节)的主体内 时,才允许访问

在这里,成员字段k在类中声明Line。当您在print方法中访问它时,您正在 包含该 成员 的声明的顶级类的主体中对其 进行访问。

顶级课程的章节在这里