Почему класс или интерфейс не могут получать частные или защищенные модификаторы доступа?
Я читаю текст Java, и в тексте говорится, что мы можем применять только модификатор доступа public
или default
для класса и интерфейса. Следовательно, это компиляционная ошибка, если мы объявляем:
private class A {}
или
protected class A{}
Мне просто интересно, почему класс или интерфейс не могут получить модификаторы доступа private
или protected
?
Ответы
Ответ 1
private
означает "только видимый в классе-оболочке".
protected
означает "только видимый в классе-оболочке и любых подклассах, а также в любом месте в охватывающем пакете классов".
private
, следовательно, не имеет смысла при применении к классу верхнего уровня; то же самое касается первой части определения protected
. Вторая часть protected
может применяться, но на нее распространяется модификатор по умолчанию (с защитой от пакета), поэтому protected
является частью бессмысленной и частично избыточной.
Оба private
и protected
могут (и часто) применяться к вложенным классам и интерфейсам, а не только к классам и интерфейсам верхнего уровня.
Ответ 2
классы верхнего уровня могут иметь только public
или default
доступ, но внутренние классы могут иметь private access
:
public class TestClassAccess
{
public static void main(String[] args)
{
new TestClassAccess().new TestClassPrivateAccess();
}
private class TestClassPrivateAccess
{
TestClassPrivateAccess()
{
System.out.println("I'm a private class");
}
}
}
Ответ 3
Есть только два варианта использования видимости класса на верхнем уровне (a) Видно везде (b) Видно только внутри пакета. Следовательно, только два модификатора (public
и значение по умолчанию). Если класс public
, то он отображается для всех классов. Если нет модификатора доступа, он отображается только для классов внутри одного пакета.
Если бы было больше случаев использования видимости класса на верхнем уровне, язык Java предоставил бы больше модификаторов.