我有两个班级,如下所示
public class A{
private static class B{
private static int s1;
private static int s2;
private int x;
}
}
在类b中,所有字段都是私有的,这些字段在类a中不应被访问。但有一个“谜”是,静态字段在类和类中是可以访问的
private int x
无法访问。我的问题是为什么私有静态字段在类a中是可访问的?
注意:我的b类是静态的,它的构造函数是私有的。
5条答案
按热度按时间eoxn13cs1#
你把示例和静态混淆了,看看下面的代码,外部类可以访问所有私有字段,唯一的区别是如果字段不是静态的,你就需要一个对象的示例。
i7uq4tfw2#
即使内部类成员被定义为private和protected,外部类也会访问内部类的成员。这些限定符(private、protected等)只会影响从外部类派生的类中内部类的可见性。请正确引用成员:
deyfvvtc3#
医生说
非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。
与示例方法和变量一样,内部类与其封闭类的示例相关联,并且可以直接访问该对象的方法和字段。
jc3wubiy4#
内部类中的字段和方法总是从外部类可见。这是故意的。如果要隐藏字段和方法,请使用单独的类。
envsm3lx5#
除了@uwe plonus(+1)给出的答案之外,我可以假设您试图访问非静态字段
x
via类B
不创建示例,即。B.x = 5;
你必须创建claas的示例B
访问其示例成员,即。new B().x = 5;