Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Розмежування доступу в Java

Рівень доступу елемента мови є статичною властивістю, задається на рівні коду й завжди перевіряється під час компіляції. Спроба звернутися безпосередньо до закритого елементу викличе помилку.

В Java модифікатори доступу вказуються для:

- типів (класів та інтерфейсів) оголошення верхнього рівня;

- елементів вказівних типів (полів, методів, внутрішніх типів);

- конструкторів класів.

Як наслідок, масив також може бути недоступний у тому випадку, якщо недоступний тип, на основі якого він оголошений.

Всі чотири рівня доступу мають лише елементи типів і конструктори. Це:

- public;

- private;

- protected;

- якщо не вказано ні один з цих трьох типів, те рівень доступу визначається за замовчуванням (default).

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

Нарешті, protected дає доступ спадкоємцям класу. Зрозуміло, що спадкоємцям може знадобитися доступ до деяких елементів батька, з якими не доводити мати справу зовнішнім класам.

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

- private

- (None) default

- protected

- public

Тепер розглянемо, які модифікатори доступу можливі для різних елементів мови.

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

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

- масив має тої ж рівень доступу, що й тип, на основі якого він оголошений (природно, всі примітивні типи є повністю доступними).

- елементи й конструктори об'єктних типів. Мають усі чотири можливі значення рівня доступу. Всі елементи інтерфейсів є public.

Для типів оголошення верхнього рівня немає необхідності у всіх чотирьох рівнях доступу. Private-типи утворювали б закриту міні-програму, ніхто не міг би їх використовувати. Типи, доступні тільки для спадкоємців, також не були визнані корисними.

Розмежування доступу позначаються не тільки на зверненні до елементів об'єктних типів або пакетів (через складене ім'я або пряме звернення), алі також при виклику конструкторів, спадкуванні, приведенні типів. Імпортувати недоступні типи забороняється. Перевірка рівня доступу проводитися компілятором.

Розглянемо базові можливості оголошення класів. Оголошення класу складається йз заголовка й тіла класу.

Спочатку вказуються модифікатори доступу класу. Допустимими є public, або його відсутність – доступ за замовчуванням.

Клас може бути оголошений як final. У цьому випадку не допускається створення спадкоємців такого класу. На своїй гілці спадкування він є останнім. Клас String і класи-обгортки, наприклад, являють собою final-класи.

Після списку модифікаторів вказується ключове слово class, а потім ім'я класу - коректний Java-ідентифікатор. Таким чином, найкоротшим оголошенням класу може бути такий модуль компіляції:

 

class A {}

 

Фігурні дужки позначають тіло класу.

Зазначений ідентифікатор стає простим ім'ям класу. Далі заголовок може містити ключове слово extends, після якого має бути вказано ім'я (просте чи складене) доступного не final класу. У цьому випадку оголошений клас успадковується від зазначеного класу. Якщо вираз extends не застосовується, то клас успадковується безпосередньо від Object. Вираз extends Object допускається але ігнорується.

 

8 Тіло класу

Тіло класу може містити оголошення елементів (members) класу:

- полів;

- внутрішніх типів (класів та інтерфейсів);

І інших допустимих конструкцій:

- конструкторів;

- ініціалізаторов

- статичних ініціалізаторов.

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

Не елементи не володіють іменами, а тому не можуть бути викликані явно. Їх викликає сама віртуальна машина. Наприклад, конструктор викликається при створенні об'єкту. З тієї ж заподій не-елементи не володіють модифікаторами доступу.

Елементами класу є елементи, описані в оголошенні тіла класу й передані в спадок від класу-батька (крім Object - єдиного класу, який не має одного з батьків) і всіх реалізованих інтерфейсів за умови достатнього рівня доступу. Таким чином, якщо клас містить елементи з доступом за замовчуванням, те його спадкоємці з різних пакетів будуть володіти різним набором елементів. Класи з того ж пакету можуть користуватися повним набором елементів, а з інших пакетів - тільки protected і public. private-елементи в спадок не передаються.

Поля й методи можуть мати однакові імена, оскільки звернення до полів завжди записується без дужок, а до методів - завжди з дужками.

Оголошення конструкторів

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

Тіло конструктора порожнім бути не може й тому завжди описується у фігурних дужках (для найпростіших реалізацій дужки можуть бути порожніми).

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

Вираз super може стояти тільки на першому рядку конструктора. Часто можна побачити конструктори взагалі без такого виразу. У цьому випадку компілятор першим рядком за замовчуванням додає виклик батьківського конструктора без параметрів (super()). Якщо в батьківського класу такого конструктора немає, вираз super обов'язково має бути записано явно (і саме на першому рядку), оскільки необхідна передача вхідних параметрів.

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


Тема 10 Робота з інтерфейсами


Читайте також:

  1. Вимоги до абонентського доступу
  2. Гриф обмеження доступу до документа
  3. Зберігання зернових мас без доступу повітря
  4. Контроль доступу
  5. Контроль доступу до системи
  6. Контроль доступу за допомогою інтерфейсу класу
  7. Метод доступу CSMA/CD
  8. Метод доступу CSMA/CD
  9. Місцеві державні адміністрації та органи місцевого самоврядування: взаємодія і розмежування повноважень.
  10. Можливості файлової системи NTFS по обмеженню доступу до файлів і каталогів
  11. Обмеження доступу до проектної документації
  12. Особливості доступу до інформації про діяльність Верховної Ради України, Президента України, органи виконавчої влади та органи місцевого самоврядування




Переглядів: 1370

<== попередня сторінка | наступна сторінка ==>
Імпорт-вирази | Інтерфейси

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.004 сек.