Есть ли смысл в модификаторах доступа для полей частного внутреннего класса?
Предположим, что у меня есть внешний класс с внутренним классом внутри. Внутренний класс имеет четыре поля со всеми возможными модификаторами доступа.
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, если я создаю экземпляр внутреннего класса и попытаюсь изменить значение для каждого из полей, мне это удастся. Поэтому я вижу, что нет смысла в модификаторах доступа для вышеуказанных полей. Есть?
Отредактировано: Главный вопрос:
Какие модификаторы доступа следует выбирать для членов частного внутреннего класса? Внутренний класс может не только реализовать интерфейс. Я могу создать в нем сложную структуру с логикой.
Ответы
Ответ 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
Если внутренний класс не реализует никакого интерфейса или наследования, то нет смысла указывать модификаторы доступа.
Если внутренний класс наследует что-то, он имеет смысл в этом контексте.