Для организации областей видимости как методов и полей классов так и самих классов человечество придумало ключивые слова или модификаторы доступа.
Модификаторы доступа в C#
Нем ного документации почитать
Access Modifiers (C# Reference)
Accessibility Levels (C# Reference)
Access Modifiers (C# Programming Guide)
Restrictions on using accessibility levels (C# Reference)
модификаторы
public
Нет ограничений на доступ к члену класса.
protected
Доступ ограничен классом в котором объявлен член и классами наслеждниками.
internal
Доступ ограничен текущей сборкой.
protected internal
Доступ можно получить в пределах текущей сборки, текущего класса или классов наследников.
private
Тоступ только в пределах класса в котором объявлен метод, поле и т.п.
Аналогично Java, конструкция типа
private class
не имеет смысла.
private protected
Доступ возможен только из класса или наследников но только в пределах текущей сборки.
file
Область видимости ограницена текущим файлом.
широко используется для source generators
default
По умолчанию членам класса будет назначена приватная обсласть видимости, классу в пространстве имен - internal
Типы данных и модификаторы доступа
namespaces
Имеет public
по умолчанию и мы не можем это изменить.
Все что находится внутри namespaces
может иметь public
или internal
модификатор. По умолчанию - internal
.
Enum - по умолчанию имеет public
тип.
class & class members
Класс может иметь public
или internal
модификатор. По умолчанию - internal
.
Члены класса по умолчанию имеют private
тип доступа но мы можем задать любой другой.
struct
В структуре все типы по умолчанию private
но могут иметь public
, internal
или private
.
interface
Члены в интерфейсе по умолчанию public
и не могут быть переопределены.
enumeration
Члены в enumeration по умолчанию public
и не могут быть переопределены.
Модификаторы доступа в Java
Controlling Access to Members of a Class
public
Член класса помеченный как public будет доступен всем.
private
Ограничение области видимости до класса в котором объявлем метод, поле, вложенный класс.
Мы можем определить класс как private но смысла в это не много и такой код не будет скомпилирован. Но мы можем использовать
private class
для вложенных классов.
protected
Доступность в пределах класса и классов наследников. Также доступность в классав находящихся в том же пакете.
default (package-private)
По умолчанию (без указания мождификатора доступа) область видимости ограницена пакетом и методы и поля видны в пределах всего пакета (package-private).