当前位置: 首页 > 面试题库 >

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

凌昕
2023-03-14
问题内容

谁能告诉我私人会员的访问级别?我一直对这段代码感到困惑:为什么可以在外部类的“打印”方法中访问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方法中访问它时,您正在 包含该 成员 的声明的顶级类的主体中对其 进行访问。

顶级课程的章节在这里。



 类似资料:
  • 问题内容: 在Java中,内部类可以访问封闭类的私有成员。但是外层可以访问内层的私有成员吗?这与内部类是否静态无关。我认为这是不正确的,但是以下代码似乎可以编译并正常工作。 问题答案: 是的,没关系。从JLS,第6.6.1节中: 否则,如果声明了成员或构造函数,则仅当访问发生在封装成员或构造函数的声明的顶级类(第7.6节)的主体内时,才允许访问。 您甚至可以在另一个嵌套类型Y中引用嵌套类型X的私有

  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 我只是碰巧发现,可以使用指令在封闭类之外直接访问嵌套私有模板类: 标记为“error:__xxx is private”的行在未注释时正确报告错误。但是使用的行编译时不会受到编译器的任何抱怨。 我在GCC-4.9.2、Clang-3.5.0和visual studio 2013 Express上尝试了这一点。GCC命令行:

  • 我认为内部类的成员,即使被声明为私有的,也可以从它的封闭类中访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了Iterable接口。Iterator在内部类中实现。当内部类的一个实例通过iterator()方法获得时,我无法使用该实例访问数据栏。 有什么建议吗?

  • 我一直在试图理解java中嵌套类的机制。 考虑以下代码: } 我知道内部类是编译器的一种现象,虚拟机不知道它们。内部类被翻译成带有$分隔外部和内部类名的常规类文件。 为了更详细地理解这种机制,我尝试使用javap-p命令反汇编在java版本1.8中编译的类文件。 我得到了以下结果:OuterClass: 内部类: 在这里我们可以看到编译器通过构造函数将外部类的引用传递给内部类,以便它可以评估外部类

  • 我创建了一个简单的列表类。我想做的是在 SLList 中创建一个方法来为 SLList 对象提供大小。我想以递归方式执行此操作,但是,我创建的以下 size() 方法不起作用。我知道其他实现它的方法,例如创建一个帮助器方法。但我好奇的是,为什么我的尺寸()不起作用?错误消息是“大小 () 未定义为 SLList.IntNode”。为什么?既然我使嵌套的IntMode类只是公共的和非静态的,为什么它