当前位置: 首页 > 知识库问答 >
问题:

java-private内部类公共成员

诸葛砚文
2023-03-14

访问级别修饰符如何改变内部私有类中成员的行为?我有这个密码

class Main {
    private static class Inner {
        private static int a = 1;
    }
    public static void main(String[] args) {
        System.out.print(Inner.a);
    }
}
  • 属性是私有的:我可以从Main访问它,但不能从Main外部访问它(因为Inner是私有的)
  • 属性是public的:我仍然可以从Main访问它,但不能从Main外部访问它(因为Inner是private的)

我看不出有什么不同

共有1个答案

夏侯宏旷
2023-03-14

inner是私有的,只能从main中访问。即使a是公共的,但inner是私有的,并且不能从特定位置访问,a的属性也是不相关的。

class Main {
    private static class Inner {
        public static int a = 1;
    }
    public static void main(String[] args) {
        System.out.print(Inner.a);
    }
}

当你跑的时候,

1

只要inner在同一类中是静态的(main),inner(及其所有成员)总是可以从main类的任何位置访问。它在main类之外是私有的。如果我能进入

Main main = new Main();
main.Inner; // Compilation Failure. Inner is not accessible
// Technically I would never do new Main(), but to illustrate I am doing so.
class Main {
    public static void main(String[] args) {
        System.out.print(SomeClass.Inner);
    }
}

class SomeClass{
    private static class Inner {
        public static int a = 1;
    }

}

为了说明使A私有或公共的区别,请考虑以下两个示例

class Main {
    public static void main(String[] args) {
        System.out.print(SomeClass.Inner.a);
    }
}

class SomeClass{
    public static class Inner {
        private static int a = 1;  // If a is private, it produces an error above
      //public static int a = 1; // This would not be an error
    }
}

因此,在您的特定情况下,只要它在同一个类main中,它就不相关,但如果它在外部,就很重要。

 类似资料:
  • 问题内容: 有人可以给我解释一下/ 内部 类有什么区别吗? 我知道内部类应尽可能避免(如本文所述)。 但是据我所知,使用或修饰符之间没有区别。 看一下这个例子: … … 所有这些都可以编译,并且无论我声明 还是都有效。 我想念什么?请指出一个使用或有所不同的情况。 谢谢。 问题答案: 该访问修饰符将限制从比在同一个包及其子类之外的其他类的访问。 在所示的示例中,和和将具有相同的效果,因为它们位于同

  • 问题内容: 如果仍然无法在包含类的外部访问它,则用Java声明一个私有内部类的成员的原因是什么?可以吗 问题答案: 如果该类没有扩展任何类或实现任何接口,那么我认为这是无稽之谈,因为没有其他类可以访问它的任何实例。 但是,如果它扩展或实现了任何其他非私有类或接口,则是有意义的。一个例子:

  • 问题内容: 我正在Kotlin中开发一个Android 密码库。我有几个类在Java应用程序中公开可见。在文档中找到了这一点。 声明成为Java。类的成员会经历名称重整,以使其更难从Java中意外使用它们,并允许重载具有相同签名但根据Kotlin规则彼此不可见的成员。 有办法解决这个问题吗? 问题答案: 我已经看到您所有的内部类都涉及加密和解密。 您可以通过定义一个顶级函数并将其标记为 ,然后将E

  • 请在反射API方面帮助我。如果内部类没有“public”修饰符,我就不能实例化它。我有课:

  • 本节我们将介绍 Java 中的内部类。通过本节的学习,我们将了解到什么是内部类,内部类的分类和作用。在内部类的分类部分,我们将逐一学习各个类型的内部类如何定义,如何实例化以及各自的特点,要注意区分不同类型内部类的异同。有了这些基础知识之后,我们也会结合示例介绍为什么需要内部类。 1. 概念 在 Java 语言中,可以将一个类定义在另一个类里面或者一个方法里面,我们把这样的类称为内部类。 与之对应的

  • 局部内部类是指在一个方法中定义的内部类。示例代码如下: 局部内部类有如下特点: 1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。 2)局部内部类只在当前方法中有效。 3)局部内部类中不能定义 static 成员。 4)局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、priv