Несмотря на то, что обычно считается хорошей практикой явное указание во всех модификаторах доступа, не исключено, что их можно опускать с каким-либо видом по умолчанию.
Конечно, это значение по умолчанию должно быть разумным. Если значение по умолчанию было общедоступным, и оно использовалось ненадлежащим образом, то не было бы никакого способа статически определить, что это было ошибкой (если только оно не выявило тип, который в других местах определен с меньшим доступом), код мог работать в течение нескольких месяцев или лет, прежде чем кто-то заметил ошибку и затем его исправление будет серьезным изменением сборки.
Поскольку значение по умолчанию является закрытым, где это применимо, и внутренним во всех других случаях, то, если это ошибка, это приведет к ошибке компилятора (поскольку что-то требует, чтобы у нее был больший доступ), которая легко перехватывается, или в классе просто невидим для других сборок (легко перехватывается, особенно в большинстве IDE).
Ограничительные значения по умолчанию являются очевидным путем.