Подтвердить что ты не робот

Есть ли смысл в модификаторах доступа для полей частного внутреннего класса?

Предположим, что у меня есть внешний класс с внутренним классом внутри. Внутренний класс имеет четыре поля со всеми возможными модификаторами доступа.

class Outer {
    private class Inner {
        public int publicField;
        protected int protectedField;
        int packagePrivatefield;
        private int privateField;
    }

    void doSomethingWithFields() {
        Inner inner = new Inner();
        inner.publicField = 111;
        inner.protectedField = 111;
        inner.packagePrivatefield = 111;
        inner.privateField = 111;
    }
}

Внутренний класс является закрытым, поэтому я не могу создавать его экземпляры вне класса Outer. Внутри класса Outer, если я создаю экземпляр внутреннего класса и попытаюсь изменить значение для каждого из полей, мне это удастся. Поэтому я вижу, что нет смысла в модификаторах доступа для вышеуказанных полей. Есть?

Отредактировано: Главный вопрос: Какие модификаторы доступа следует выбирать для членов частного внутреннего класса? Внутренний класс может не только реализовать интерфейс. Я могу создать в нем сложную структуру с логикой.

4b9b3361

Ответ 1

У модификаторов доступа есть слово в наследовании. Другой внутренний частный класс, который расширяет этот класс, о котором вы говорите, не имеет привилегий внешнего класса.

public class Main {
    private class Test {
        protected int hello;
    }
    private class TestNext extends Test {
        private TestNext() {
            this.hello = 1;
        }
    }
}

Будет компилироваться, но если hello был закрытым, это не так.

Ответ 2

Правильно, если внутренний класс является закрытым, это не имеет смысла.

Но имейте в виду, что внутренние классы не очень красивы в целом, вам следует группировать несколько классов с пакетами.

Ответ 3

Да. Ты прав. Но только если у вас есть одно вложенное внутреннее. Нет разницы между наличием различных модификаторов доступа в частном внутреннем классе. Ничего не видно из класса. Но если у вас есть другой вложенный внутренний класс, ваши модификаторы доступа будут иметь значение. например.

class A{
   private class B{
      class C{}
   }
}

в этом случае модификаторы доступа класса B и класса будут иметь значение

Ответ 4

Если внутренний класс не реализует никакого интерфейса или наследования, то нет смысла указывать модификаторы доступа.

Если внутренний класс наследует что-то, он имеет смысл в этом контексте.