Java-私有内部类公共成员

Java-私有内部类公共成员,java,class,nested,private,member,Java,Class,Nested,Private,Member,访问级别修饰符如何更改内部私有类中成员的行为? 我有这个密码 class Main { private static class Inner { private static int a = 1; } public static void main(String[] args) { System.out.print(Inner.a); } } 我可以从外部类访问属性“a”,它的访问级别是public还是private(这对我来说已

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

class Main {
    private static class Inner {
        private static int a = 1;
    }
    public static void main(String[] args) {
        System.out.print(Inner.a);
    }
}
我可以从外部类访问属性“a”,它的访问级别是public还是private(这对我来说已经很奇怪了)。 问题是:如果属性是“公共静态int”,那么的区别是什么(考虑到内部类是私有的,因此无法从“主”类的外部访问)

重述

  • 属性是私有的:我可以从Main访问它,但不能从Main外部访问(因为内部是私有的)
  • 属性是公共的:我仍然可以从Main访问它,但不能从Main外部访问(因为内部是私有的)

我看不出有什么不同

内部
是私有的,只能从
Main
中访问。即使
a
是公共的,但
internal
是私有的,并且不能从特定的位置访问,
a
的属性也将是无关的

class Main {
    private static class Inner {
        public static int a = 1;
    }
    public static void main(String[] args) {
        System.out.print(Inner.a);
    }
}
当你跑步的时候

1
只要
internal
在同一类中是静态的,(
Main
)、
internal
(及其所有成员)总是可以从
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
,它就无关紧要,但如果它在下一个示例中是外部的,那么它就很重要。

您可以将您的
内部
类视为类级属性。将其设置为私有将阻止在类外访问它。因为它是一个内部类,所以内部类的变量属于外部类,因此外部类可以访问它,而不管访问修饰符是什么


好的,但是公开私有内部类的属性有什么区别?当内部类是私有的时,公开属性有什么区别?当
internal
Main
在同一个类中时:
public
private
只要你在
Main
类中就不重要了。您是对的,因为
internal
是私有的,所以只能从
Main
中访问它。即使
a
是公共的,但
internal
是私有的,并且不能从特定的位置访问,
a
的属性也将是无关的。