Лабораторна робота № 5
Використання класів та наслідування
Оголошення класів дуже важливе, оскільки будь-яка програма на Java — це набір класів.
Модифікатори доступу в багатьох мовах. Вони обмежують можливість використання, наприклад, змінної у класі. Легко уявити права доступу двох граничних видів: це public, коли поле доступне з будь-якої точки програми, і private, коли поле може бути використане тільки всередині того класу, в якому воно оголошено.
Нехай у класі Human існує поле age цілочисельного типу, оголошеного public:
public class Human {
public int age;
}
Може виникнути ситуація, що цілочисельного типу даних вже недостатньо, потрібно змінити тип поля на дробовий. Але якщо просто змінити int на double, òîä³ óñ³ ðîçðîáíèêè, ÿê³ êîðèñòóâàëèñÿ êëàñîì Human ³ éîãî ïîëåì age, âèÿâляòü, ùî ó ¿õíüîìó êîä³ ç’явилися помилки, тому що поле стало дробовим і в рядках таких як:
|
|
Human h=getHuman();
Int i=h.age;
буде виникати похибка із-за спроби провести неявним чином звуження примітивного типу.
Подібна зміна (взагалі, невелика і локальна) потребує модифікації у багатьох класах. Тому внесення в неї змін буде неприпустимим, невиправданим з точки зору кількості зусиль, які необхідно затратити. Тобто, оголосивши один раз поле або метод як public, ìîæíà îïèíèòèñÿ â ñèòóàö³¿, êîëè íàéìåíø³ çì³íè (³ìåí³, òèïó, õàðàêòåðèñòèê, ïðàâ âèêîðèñòàííÿ) â ïîäàëüøîìó ñòàíóòü íåìîæëèâèìи.
Íàâïàêè, ÿêùî á ïîëå áóëî îãîëîøåíå ÿê private, à для читання і зміни його значень були б введенні додаткові методи, то ситуація змінилась би:
public class Human {
private int age;
//, age
public int getAge(){
return age;
}
//, age
public void setAge(int a){
age=a;
}
}
В цьому випадку з цим класом могли би працювати багато програмістів, могла бути створена велика кількість класів, використовуючих тип Human, але модифікатор private дає гарантію, що ніхто безпосередньо цим полем не зкористується і зміна його типу була б цілком безболісною оперцією, зв’язаною із змінною саме в одному класі.
Розмеження доступу в Java
Рівень доступу до елемента являється статичною властивістю, задається на рівні коду і завжди перевіряється під час компіляції. Спроба звернутися до закритого елементу приведе до виникнення помилки.
|
|
В Java ìîäèô³êàòîðè äîñòóïó âêàçóþòüñÿ äëÿ:
§ типів (класів та інтерфейсів) оголошення верхнього рівня;
§ елементів типів-посилань (полів, методів, внутрішніх типів);
§ конструкторів класів.
Як наслідок, масив також може бути недоступним, якщо недоступний тип, на основі якого він оголошений.
Усі чотири рівні доступу мають тільки елементи типів і конструкторів. Це:
§ public;
§ private;
§ protected;
§ якщо не вказаний жоден з цих трьох типів, то рівень доступу визначається за замовчуванням(default).
Ïåðø³ äâà ç íèõ âæå ðîçäèâëÿëèñü. Îñòàíí³é ð³âåíü(äîñòóï çà çàìîâ÷óâàííÿì) äîçâîëÿº çâåðíåííÿ ç òîãî æ ïàêåòó, äå îãîëîøåíèé ñàì êëàñ. Ç ö³º¿ ïðè÷èíè ïàêåòè â Java є не тільки набором типів, а більш структурованою одиницею, так як типи всередині одного пакету можуть більше взаємодіяти один з одним ніж з типами з інших пакетів.
Нарешті, protected äຠäîñòóï ñïàäêîºìöÿì êëàñó.
Îãîëîøåííÿ êëàñ³â
Ðîçãëÿíåìî áàçîâ³ ìîæëèâîñò³ îãîëîøåííÿ êëàñ³â. Îãîëîøåííÿ êëàñó ñêëàäàºòüñÿ ç çàãîëîâêó ³ ò³ëà êëàñó.
Çàãîëîâîê êëàñó
Ñïî÷àòêó âêàçóþòüñÿ ìîäèô³êàòîðè êëàñó. Ïðèïóñòèìèì ÿâëÿºòüñÿ public, або його відсутність – доступ за замовчуванням. Клас може бути оголошений як final. В цьому випадку не допускається створення спадкоємців такого класу. На своїй гілці спадкування він являється останнім. Клас String і класи-обгортки являються final-класами. Після списку модифікаторів вказується ключове слово class, à ïîò³ì ³ì’я класу – коректний Java-ідентифікатор. Таким чином, найкоротшим оголошенням класу може бути такий модуль компіляції:
class A{}
Тіло класу
Тіло класу містить оголошення елементів (members) класу:
§ полів;
§ методів;
§ внутрішніх типів (класів та інтерфейсів);
та інших допустимих конструкцій:
§ конструкторів;
§ ініціалізаторів;
§ статичних ініціалізаторів.