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

Почему класс или интерфейс не могут получать частные или защищенные модификаторы доступа?

Я читаю текст Java, и в тексте говорится, что мы можем применять только модификатор доступа public или default для класса и интерфейса. Следовательно, это компиляционная ошибка, если мы объявляем:

private class A {}

или

protected class A{}

Мне просто интересно, почему класс или интерфейс не могут получить модификаторы доступа private или protected?

4b9b3361

Ответ 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 предоставил бы больше модификаторов.