Что конкретно делает mvn в maven?

@ Никита Рыбак ответ имеет хорошие моменты, но отсутствие деталей, я не могу просто получить идею, не задумываясь о себе, следующее, что я подумал, и теперь я должен полностью понять причину.

Четыре модификатора доступа, предположим, что 1-й уровень является общедоступным, а 4-й уровень является конфиденциальным (на основе этой таблицы в последовательности). Первое, что мы должны знать, - это то, почему класс не может быть определен как закрытый в верхнем уровне.

Итак, если «private class foo» (определенный частный член, то есть сам класс является членом), разрешите, внешний (который содержит элемент)? Область файлов? Нет, внешний файл бессмыслен, потому что даже несколько классов в одном файле будут скомпилированы в отдельные файлы классов. Таким образом, внешний - это пакет. Но модификатор доступа по умолчанию третьего уровня уже означает «package-private». Таким образом, модификатор частного доступа 4-го уровня не будет использоваться / разрешен.

Но вложенный закрытый класс разрешен, потому что прямой внешний является классом, а не пакетом, , например :

class PrivateNestedMain {
    private static class Inner {
        public static void main(String[] args) {
            System.out.println("Hello from Inner!");
        }
    }
}

Теперь, что, если «protected class foo» позволять ? защищенная основная характеристика - это подкласс, поэтому внешний (пакет) СЛЕДУЕТ (из-за увеличения объема, но все же он является необязательным) обеспечивает стиль подкласса, т. е. подпакет или package A extends package B, но мы не знаем такой вещи. Таким образом, защита не может использовать полный потенциал (основная область подкласса) на верхнем уровне, внешний - это пакет (т. Е. Такая субпакетная вещь), но защищенный может использовать полный потенциал во вложенном классе, который внешний является классом ( т. е. может быть подклассом):

class ProtectedNestedMain {
    protected static class Inner {
        public static void main(String[] args) {
            System.out.println("Hello from Inner!");
        }
    }
}

Обратите внимание, что вышеупомянутое «не может использовать полный потенциал» из-за того, что оно не может достигнуть подкласса только потому, что никакой внешний подкласс, который на самом деле не защищен, может позвольте, это просто вопрос выбора, чтобы избежать дублирования работы пакета-частного, если внешний не подклассы, см. ниже.

. Меня путают, главным образом, из-за знаменитой таблицы в https: // docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html:

Если 1-й уровень (общедоступный) и 3-й уровень (пакет-частный) разрешен, как на том основании, что промежуточный 2-й уровень (защищенный) не разрешен?

подкласс общественной поддержки настолько легко вводить в заблуждение. Правильный способ прочитать эту таблицу -

, если внешняя имеет функцию подкласса.

blockquote>

То же самое вводит в заблуждение для pacakage-private, pacakage- private не поддерживает подкласс (N в ячейке) не означает, что концепция подкласса применяется во внешнем.

Это означает, что мы должны игнорировать столбец подкласса, если функция подкласса недоступна во внешнем:

Как мы видим теперь, как защищенные, так и private-пакеты на одном уровне теперь (YYN), больше не путают о том, почему промежуточный уровень недопустим. В целом, Java выбирает только пакет-приватный поверх защищенного, чтобы избежать путаницы (это просто вопрос выбора, но защищенная основная характеристика - это подкласс, поэтому пакет-частный превосходит), а результат - только 2 доступа модификаторы, разрешенные на верхнем уровне:

На верхнем уровне - public или package-private (без явного модификатора).

blockquote>

148
задан gvlasov 15 June 2015 в 10:27
поделиться