inner 类 是否使封装的概念失效?

Do inner classes invalidate the concept of Encapsulation?

使用 private 访问修饰符,以便我们只能在 class 中使用相应的成员。但是使用内部 classes,我们可以定义一个方法来访问外部 class 的 private 成员。这是相关代码:

import java.util.*;
import java.lang.*;
import java.io.*;

class Outer {
    private int x = 1;

    Inner getInner() {
        Inner inner = new Inner();
        return inner;
    }

    class Inner {
        int getX() {
            return x;
        }
    }
}

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Outer outer = new Outer();
        Outer.Inner inner = outer.getInner();
        System.out.println("Private x: "+inner.getX());
    }
}

这不违背封装的概念吗?

"Inner" class 是 "capsule" 的一部分 - 外部 class。所以绝对没问题,它可以访问外部 class 的私有变量。封装的要点是从外部隐藏部分实现,"Inner" class 不在外部,它在 class.

内部

The private access modifier is used so that we can use the respective member only within the class.

因为内部 class 是 class 的一部分,所以这仍然成立。对私有数据的访问被限制在内部,因此保留了封装。 此外,由于您能够修改 class 的源文件,这意味着您无论如何都可以访问其所有内部结构。