Внутренние классы лишают законной силы понятие Инкапсуляции? - PullRequest
0 голосов
/ 30 августа 2018

Модификатор доступа 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 голосов
/ 30 августа 2018

Модификатор частного доступа используется, чтобы мы могли использовать соответствующие член только внутри класса.

Поскольку внутренний класс является частью класса, это все еще сохраняется. Доступ к частным данным ограничен, поэтому инкапсуляция сохраняется. Кроме того, поскольку вы можете изменять исходный файл класса, это означает, что вы в любом случае имеете доступ ко всем его внутренним компонентам.

0 голосов
/ 30 августа 2018

Класс «Внутренний» входит в состав «капсулы» - Класса внешнего. Так что абсолютно нормально, что он может обращаться к закрытым переменным класса Outer. Смысл Encapsulation заключается в том, чтобы скрыть части реализации извне, и класс «Inner» находится не снаружи, а внутри класса.

...