Что такое общедоступное, частное и защищенное в объектно-ориентированном программировании?

94

Что такое общедоступное, частное и защищенное в объектно-ориентированном программировании?

Белая горячка
источник
+1, одна из тех вещей, которые мне было немного трудно

Ответы:

153

Они являются модификаторами доступа и помогают нам реализовать инкапсуляцию (или скрытие информации). Они сообщают компилятору, какие другие классы должны иметь доступ к определяемому полю или методу.

private - Только текущий класс будет иметь доступ к полю или методу.

protected - Только текущий класс и подклассы (а иногда и классы того же пакета) этого класса будут иметь доступ к полю или методу.

public - Любой класс может ссылаться на поле или вызывать метод.

Предполагается, что эти ключевые слова используются как часть объявления поля или метода в определении класса.

Бен С
источник
4
обратите внимание, что в java члены одного и того же пакета могут получить доступ к защищенным членам
Лэндон Кун
2
Да, и в Java также есть четвертый модификатор доступа - пустая строка. Отсутствие модификатора доступа разрешит доступ из любого класса уровня пакета.
Ben S,
1
Мне нравится «компиляторная» часть, потому что на большинстве языков, которые я знаю, все функции / классы могут быть легко доступны во время выполнения, например, через отражения в .NET. Поэтому я склонен сказать, что эти модификаторы доступа в основном просто помогают программистам направлять других программистов, работающих над / с тем же кодом, скрывая определенные вещи.
merkuro
1
У некоторых языков есть свои особенности. Как и в Delphi, закрытые члены доступны другим классам в том же модуле, и вы должны использовать строго закрытые, если вы не хотите такого поведения.
Fabio Gomes,
1
C # также выполняет трюк с защищенными от доступа членами одного и того же пакета. По сути, C # - это просто Java от Microsoft
iGbanam
7

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

Моника
источник
6

На самом деле это не концепции, а скорее конкретные ключевые слова, которые, как правило, встречаются (с немного другой семантикой) в популярных языках, таких как C ++ и Java.

По сути, они предназначены для того, чтобы позволить классу ограничивать доступ к членам (полям или функциям). Идея состоит в том, что чем меньше одному типу разрешен доступ в другом типе, тем меньше может быть создано зависимостей. Это позволяет более легко изменять объект, к которому осуществляется доступ, не затрагивая объекты, которые на него ссылаются.

В широком смысле общедоступный означает, что доступ разрешен всем, частный означает, что доступ разрешен только членам одного и того же класса, а защищенный означает, что члены подклассов также разрешены. Однако каждый язык добавляет к этому свои особенности. Например, C ++ позволяет наследовать непублично. В Java также есть уровень доступа по умолчанию (пакет), есть правила для внутренних классов и т. Д.

Ури
источник
2

Открытый элемент - это элемент, доступный из любого другого класса. Вам просто нужно знать, что это за объект, и вы можете использовать оператор точки для доступа к нему. Защищенный означает, что класс и его подклассы имеют доступ к переменной, но не любым другим классам, им нужно использовать геттер / сеттер, чтобы делать что-либо с переменной. Закрытый означает, что только этот класс имеет прямой доступ к переменной, все остальное нуждается в методе / функции для доступа или изменения этих данных. Надеюсь это поможет.

mnuzzo
источник
1

как и выше, но качественно:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

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

Джон
источник
0

Подводя итог, в объектно-ориентированном программировании все моделируется в виде классов и объектов. Классы содержат свойства и методы. Ключевые слова Public, private и protected используются для указания доступа к этим членам (свойствам и методам) класса из других классов или других .dll или даже других приложений.

Заки
источник