关于oop:评估一个静态私有变量(Java),它不应该是非法的吗?

Assessing a static private variable (Java), Shouldn't it be illegal?

本问题已经有最佳答案,请猛点这里访问。

在将此问题标记为重复问题之前,请确保提供自己的解释。谢谢您。请注意私有静态变量,它们不是实例变量。

我有以下场景:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Statics {
   private static class Counter {
        private int data = 5; //Declared as private.

//        public Counter() throws IllegalAccessException {
//            throw new IllegalAccessException();
//        }

        public void bump(int inc) {
            inc++;
            data = data + inc;
        }
    }

    public static void main(String[] args) throws IllegalAccessException {
        Counter c = new Counter();
        int rnd = 2;
        c.bump(rnd);

        c.data = 0; //How this possible? It is declared as private.

        System.out.println(c.data +" &"+ rnd);
    }
}

输出:0&2

我的问题是,如何甚至可以从类外部访问数据(私有静态)变量。

在Java中,我们知道不能从类外部访问私有访问修饰符的成员。

我们总是使用setters&getter来修改私有变量的值,不是吗?我错过什么了吗?


由于类Counter是类Statics的私有成员,因此类的私有成员可以从其类内访问。


My question is, how is it even possible that I am able to access the data (private static) variable from outside the class.

关于你的问题:

"您已经能够从类本身内部访问数据(private static)变量(而不是在‘statics’类外部)。"