内部类会使封装的概念无效吗?

时间:2018-08-30 12:49:08

标签: java oop encapsulation

使用private访问修饰符,以便我们只能在类中使用相应的成员。但是,使用内部类,我们可以定义一种方法来访问外部类的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());
    }
}

这与封装的概念背道而驰吗?

2 个答案:

答案 0 :(得分:3)

  

使用private access修饰符,以便我们可以分别使用   成员仅在班级内。

由于内部类是该类的一部分,因此仍然适用。对私有数据的访问限于其中,因此保留了封装。 此外,由于您可以修改该类的源文件,因此,您仍然可以访问其所有内部信息。

答案 1 :(得分:1)

“内部”类是“胶囊”的一部分-外部类。因此绝对可以访问Outer类的私有变量。封装的重点是将实现的某些部分从外部隐藏起来,而“ Inner”类不在外部,而是在类内部。