Защищенные/общедоступные внутренние классы
Может кто-нибудь объяснить мне, в чем разница между классами protected
/public
Inner?
Я знаю, что внутренние классы public
должны избегать как можно больше (как описано в этой статье ).
Но из того, что я могу сказать, нет никакой разницы между использованием модификаторов protected
или public
.
Взгляните на этот пример:
public class Foo1 {
public Foo1() { }
protected class InnerFoo {
public InnerFoo() {
super();
}
}
}
...
public class Foo2 extends Foo1 {
public Foo2() {
Foo1.InnerFoo innerFoo = new Foo1.InnerFoo();
}
}
...
public class Bar {
public Bar() {
Foo1 foo1 = new Foo1();
Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo();
Foo2 foo2 = new Foo2();
Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo();
}
}
Все эти компиляции и действительны, объявляю ли я InnerFoo
protected
или public
.
Что мне не хватает? Пожалуйста, укажите мне случай, когда есть разница в использовании protected
или public
.
Спасибо.
Ответы
Ответ 1
Модификатор доступа protected
ограничит доступ к классам, отличным от тех, которые находятся в одном пакете и его подклассах.
В показанном примере public
и protected
будут иметь тот же эффект, что и в одном пакете.
Для получения дополнительной информации о модификаторах доступа, Контроль доступа к членам класса" "Учебники Java" могут представлять интерес.
Ответ 2
Вы можете просто думать, что защищенный внутренний класс является защищенным членом, поэтому он доступен только для класса, пакета, подкласса, но не для мира.
Кроме того, для класса outter для него существует только два модификатора доступа. Просто публичный и пакет.