Почему класс или интерфейс не могут получать частные или защищенные модификаторы доступа? - PullRequest
36 голосов
/ 18 июля 2011

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

private class A {}

или

protected class A{}

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

Ответы [ 3 ]

54 голосов
/ 18 июля 2011

private означает «виден только внутри класса включения».

protected означает «виден только внутри класса включения и любых подклассов, а также в любом месте в пакете класса включения».

private, следовательно, не имеет смысла применительно к классу верхнего уровня;то же самое относится и к первой части определения protected.Вторая часть protected может применяться , но на нее распространяется модификатор по умолчанию (с защитой пакета), поэтому protected является бессмысленным и частично избыточным.

Оба private и protected могут применяться (и часто применяются) к вложенным классам и интерфейсам, но не к классам и интерфейсам верхнего уровня.

15 голосов
/ 18 июля 2011

классы верхнего уровня могут иметь только 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");
        }
    }
}
5 голосов
/ 18 июля 2011

Существует только два варианта использования для видимости класса на верхнем уровне (a) Видимый везде (b) Видимый только внутри пакета.Отсюда только два модификатора (public и по умолчанию).Если класс public, то он виден всем классам.Если модификатор доступа отсутствует, он виден только для классов в одном пакете.

Если бы на верхнем уровне было больше вариантов использования для видимости классов, язык Java предоставил бы больше модификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...