Що таке публічне, приватне та захищене в об’єктно-орієнтованому програмуванні?


Відповіді:


152

Вони є модифікаторами доступу та допомагають нам впровадити Інкапсуляцію (або приховування інформації). Вони повідомляють компілятору, які інші класи повинні мати доступ до поля або методу, що визначається.

private - Лише поточний клас матиме доступ до поля або методу.

protected - Лише поточний клас і підкласи (а іноді і класи з однаковим пакетом) цього класу матимуть доступ до поля або методу.

public - Будь-який клас може посилатися на поле або викликати метод.

Це передбачає, що ці ключові слова використовуються як частина оголошення поля або методу у визначенні класу.


4
Зверніть увагу, що в Java учасники одного пакету можуть отримати доступ до захищених членів
Landon Kuhn

2
Так, і Java також має четвертий модифікатор доступу, який є порожнім рядком. Якщо не вказати будь-який модифікатор доступу, це дозволить доступ з будь-якого класу рівня пакета.
Ben S

1
Мені подобається частина "компілятора", оскільки до більшості мов, які я знаю, усі функції / класи можна легко отримати під час виконання, наприклад, за допомогою відображень у .NET. Тому я схильний стверджувати, що ці модифікатори доступу - це в основному лише допомога програмістам для керівництва іншими програмістами, що працюють над / з тим самим кодом, приховуючи певні речі.
merkuro

1
Деякі мови мають деякі особливості. Як і в Delphi, приватні учасники доступні для інших класів на тому самому блоці, і ви повинні використовувати строгий приватний, якщо ви не хочете такої поведінки.
Фабіо Гомес,

1
C # також виконує трюк із захистом доступу-членів одного пакета. По суті, C # - це лише Java Microsoft
iGbanam

6

Це насправді не поняття, а досить специфічні ключові слова, які, як правило, трапляються (з дещо іншою семантикою) у популярних мовах, таких як C ++ та Java.

По суті, вони призначені для того, щоб дозволити класу обмежити доступ до членів (полів або функцій). Ідея полягає в тому, що чим менше одному типу дозволено отримати доступ до іншого типу, тим менше залежностей може бути створено. Це дозволяє легше змінювати об'єкт, до якого здійснюється доступ, не впливаючи на об'єкти, що посилаються на нього.

Загалом кажучи, загальнодоступний означає, що кожен має доступ, приватний означає, що доступ мають лише члени одного класу, а захищений означає, що також дозволено членам підкласів. Однак кожна мова додає до цього свої речі. Наприклад, C ++ дозволяє успадковувати непублічно. У Java також існує рівень доступу за замовчуванням (пакет), і існують правила щодо внутрішніх класів тощо.


6

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


1

Загальнодоступний предмет - це предмет, доступний будь-якому іншому класу. Вам просто потрібно знати, що це за об’єкт, і ви можете використовувати оператор крапок для доступу до нього. Захищений означає, що клас та його підкласи мають доступ до змінної, але не будь-яких інших класів, їм потрібно використовувати геттер / сеттер, щоб робити що-небудь зі змінною. Приватний означає, що лише цей клас має прямий доступ до змінної, а все інше потребує методу / функції для доступу або зміни цих даних. Сподіваюся, це допомагає.


1

як вище, але якісно:

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

чим менше доступу ви надаєте, тим менше деталей реалізації витікає з ваших об’єктів. менша кількість такого витоку означає більшу гнучкість (вона ж "більш вільне з'єднання") з точки зору зміни способу реалізації об'єкта, не порушуючи клієнтів об'єкта. це справді фундаментальна річ для розуміння.


0

Підводячи підсумок, в об’єктно-орієнтованому програмуванні все моделюється на класи та об’єкти. Класи містять властивості та методи. Відкриті, приватні та захищені ключові слова використовуються для вказівки доступу до цих членів (властивостей та методів) класу з інших класів чи інших .dll чи навіть інших програм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.