Видимість. Специфікатори доступу
Існує можливість керувати тим, які частини програми можуть отримати доступ до членів класу. Керування доступом дозволяє запобігати зловживанням. Не завжди бажано, щоб був доступ до окремої змінної або методу класу, які мають працювати лише всередині самого класу.
- private (закритий)
- public (відкритий)
- protected (захищений)
- доступ за замовчуванням, коли жодного модифікатора немає
Як бачите, модифікатор застосуємо до змінної, методу, класу.
Припустимо, що клас оголошений якpublic, і в ньому є два методи. Одинprivate, другий -public. Ви матимете доступ до класу і додругогометоду, але не до першого, незважаючи на те, що сам клас відкритий.
Ключове словоprivateозначає, що доступ до члена класу не надається нікому, крім методів цього класу. Інші класи того ж пакету також не можуть звертатися до приватних членів.
Всі допоміжні методи класів варто оголосити якprivate, щоб запобігти їх випадковим викликам у пакеті. Теж відноситься і до private-полів усередині класу.
Ключове словоprotectedпов'язане з поняттям спадкування, при якому до вже існуючого класу (базового) додаються нові члени, причому вихідна реалізація залишається незмінною. Також можна змінювати поведінку вже існуючих членів класу. Для створення нового класу на базі існуючого використовується ключове словоextends.
Якщо під час створення нового пакета використовується спадкування від класу, що знаходиться в іншому пакеті, новий клас отримує доступ лише до відкритих (public) членів з вихідного пакета. Іноді творцю базового класу необхідно надати доступ до конкретного методу похіднихкласів, але закрити його від решти. У таких випадках використовується ключове словоprotected. Специфікаторprotectedтакож надає доступ у межах пакета, тобто. члени з цим специфікатором доступні для інших класів того ж пакета.
За умовчанням за відсутності модифікатора члена класу вважається відкритим усередині свого власного пакета, але не доступний для коду, розташованого поза цим пакетом. Якщо всі класи вашого проекту знаходяться в одному пакеті, то, по суті, змінна без модифікатора є відкритою (public).
Розглянемо вигаданий класSillySensor
Клас оголошений якpublicі доступний інших класах. У класу є зміннаsensorData, яка доступна лише у своєму класі (private). Конструктор доступний в інших класах (public). Методcalibrate()працює тільки всередині класу (private). МетодseedCalibration()доступний у своєму класі або в підкласі (protected). МетодgetSensorData()доступний в інших класах (public).