Java - private inner class public member
访问级别修饰符如何更改内部私有类中成员的行为?我有这个密码
1 2 3 4 5 6 7 8
| class Main {
private static class Inner {
private static int a = 1;
}
public static void main (String[] args ) {
System. out. print(Inner. a);
}
} |
我可以从外部类访问属性"a",要么它的访问级别是公共的,要么是私有的(这对我来说已经很奇怪了)。问题是:如果属性是"public static int",那么有什么区别(考虑到内部类是私有的,因此无法从"main"类的外部访问)?
重述
- 属性是private:我可以从main访问它,但不能从外部main访问(因为内部是private)
- 属性是公共的:我仍然可以从主目录访问它,但不能从外部主目录访问它(因为内部是私有的)
我看不出有什么不同
- 你说得对,因为Inner是私有的,所以只能从Main内部访问。即使a是公共的,但Inner是私有的,不能从特定的地方访问,a的属性也不相关。
Inner是私有的,只能从Main内访问。即使a是公共的,但Inner是私有的,不能从特定的地方访问,a的属性也不相关。
1 2 3 4 5 6 7 8
| class Main {
private static class Inner {
public static int a = 1;
}
public static void main (String[] args ) {
System. out. print(Inner. a);
}
} |
当你奔跑的时候,
当Inner在同一类中是静态的(Main时,Inner及其所有成员始终可以从Main类中的任何地方访问。它是Main类之外的私有。如果我能进入
1 2 3
| 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. |
或者更合理的例子
1 2 3 4 5 6 7 8 9 10 11 12
| 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私有化或公共化的区别,请考虑以下两个示例
1 2 3 4 5 6 7 8 9 10 11 12
| 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,它是不相关的,但是如果它作为下一个例子是在外部的,它将是重要的。
- 好吧,但是公开一个私人内部阶级的属性有什么区别呢?
- 当内部是私有的时候,公开属性有什么区别?
- 当Inner与Main属于同一类时:只要你在Main类中,public或private就不重要。ES/TJDCX
您可以将您的Inner类视为类级属性。将其设为私有将阻止在类外访问它。因为它是一个内部类,所以内部类的变量属于外部类,因此可以被外部类访问,而不管访问修饰符是什么。
http://docs.oracle.com/javase/tutorial/java/javaoo/innerclasses.html