- •Тема 1. Вступ до дисципліни
- •Тема 2. Управління ходом дій операторів програми
- •Тема 3. Ініціалізація та завершення дії змінних
- •Тема 4. Реалізація і специфікатори доступу
- •Тема 5. Успадкування в Java та його особливості
- •2. Розробка програмних систем складної структури
- •Тема 10. Створення вікон і аплетів
- •Тема 11. Розподільне програмування
- •1. Вступ до мовного середовища. Ознайомлення з мовним середовищем. Початкові відомості про мовне середовище java
- •1.1. Виконання Java-програми
- •Питання і завдання
- •1.4. Інтегроване середовище jBuilder
- •2. Постулати об'єктно-орієнтованого програмування
- •2.1. Модель і абстракція
- •2.2. Ієрархія та успадкування
- •2.4. Класи, їх структура та зміст
- •3. Управління ходом дії операторів програми
- •Питання і завдання
- •4.1. Ініціалізація за допомогою конструктора
- •4.2. Конструктор без параметрів
- •4.3. Перевантаження методів
- •4.4. Ініціалізація членів класу
- •5. Реалізація
- •6. Успадкування в java та його особливості
- •Завдання для самостійного опрацювання теми
- •7. Динамічне зв'язування (поліморфізм)
- •Завдання для самостійного опрацювання теми
- •8. Інтерфейси та внутрішні класи
- •Завдання для самостійного опрацювання теми
- •9. Обробка помилок і виключних ситуацій
- •Завдання для самостійного опрацювання теми
- •10. Система вводу/виводу в java
- •Завдання для самостійного опрацювання теми
- •Програма DirList.Java
- •11. Створення вікон і аплетів
- •Завдання для самостійного опрацювання теми
- •12. Створення додатків windows
- •12.1. Сім'я операційних систем Windows
- •12.2. Структура додатка Windows
2.4. Класи, їх структура та зміст
Опис класу починається з ключового слова class, а його ім'я — з великої літери: class Pet{ <тіло класу>
Загальний формат ключового слова class має такий вигляд:
Ім'я суперкласу список інтерфейсів
[модифікатор класу] class <ім'я класу> [extends <ім'я батьківського класу>] [implements <ім'я — і>] {тіло класу}
public —
abstract —
final —
strictfp —
Тіло класу містить опис змінних, методів, вкладених класів та інтерфейсів.
[модифікатор складного класу] class <ім'я вкладеного класу> {тіло вкладеного класу}
public —
abstract —
final —
strictfp —
protected —
private —
static —
Опис змінної вказує його тип та ім'я і може починатися з одного або кількох необов'язкових модифікаторів public, protected, static, final, transient, volatile.
При опису методу вказується тип значення, що його повертає метод, або void, далі ім'я методу і в дужках — список параметрів:
[модифікатор] ім'я методу {тіло методу}
public
protected
private
abstract
static
final
synchronized
strictfp
У списку параметрів через кому перелічуються тип та ім'я кожного параметра. Якщо перед будь-яким параметром стоїть модифікатор final, то цей параметр не може змінюватись всередині методу. Для кожного параметра перед початком роботи методу виділяється пам'ять, в якій розміщується значення параметра. Ім'я методу, кількість і типи параметрів становлять сигнатуру методу.
Компілятор з мови Java розрізняє методи за сигнатурами. Це дає змогу записувати різні методи з однаковими іменами.
Зауваження. До сигнатури методу не входить тип значення, що його повертає метод, тому методи не можуть розрізнятися тільки за типом у результаті їхньої роботи.
Прикладом використання різних методів з однаковими іменами є перевантаження методів:
sliahto (int x, int у) — пункт призначення з географічними координатами;
sliahto («Київ») — географічна назва пункту за умови визначення SliahTo (string destination) Або їх перевизначення:
class Truck extends Automobile { void moveTo (intx, inty) {
}
}
У даному разі метод з таким самим ім'ям у підкласі перекриває метод суперкласу. Наприклад, визначивши об'єкт класу Truck через
Truck honda = new Truck(); і записавши honda.MoveTo (ЗО, 100), ми звернулися до методу класу Truck. При перевизначенні права доступу до методу вони можуть розширюватися: public має бути відкритим, protected може стати відкритим.
Зауваження. За допомогою слова super можна звер нутися із середини прикладу до методу суперкласу: super.moveTo(30,100).
Ім'я методу, що належного тому самому класу, можна уточнити за допомогою this.moveTo(50,60).
Усі методи в мові Java — віртуальні функції. Розглянемо приклад: abstract class Pet {
abstract void voice ()
{
class Dog extends Pet {
intk=10;
void voice () {
System.out.println (" ");
}
}
class Cat extends Pet { void voice () {
System.out.println (" ");
}
}
class Cat extends Pet { void voice () {
System.out.println (" ");
}
}
public class Chorus {
public static void main (string [] args){
Pet [] singer = new Pet[3];
singer [0] = new Dog();
singer [1] = new Cat();
singer [2] = new Cow();
for (int i=0; і <singer. length; i++)
singer fiJ.voice();
}
}
Масив посилань singer[] має тип Pet, але кожний його елемент посилається на об'єкт свого типу Dog, Cat, Cow. При виконанні програми викликається метод конкретного об'єкта, а не метод класу, яким визначається ім'я посилання. Цю процедуру називають поліморфізмом.
Як показує приклад, і клас, і метод мають модифікатор abstract (абстрактний). Так, якщо клас містить хоча б один абстрактний метод, то він (клас) є абстрактним і його примірники не можна створити.
Для пояснення необхідності використання абстрактних імен слід розглянути елементи масиву singer[] прикладу. Ці елементи виконують посилання на підкласи Dog, Cat, Cow. Але це змінні типу Pet, і посилатися вони можуть тільки на поля та методи, описані в суперкласі Pet. Допоміжні поля підкласу для них не доступні. Тому метод, який реалізовується в кількох підкласах, виноситься до суперкласу, а там оголошується абстрактним. Абстрактні класи містяться на верхньому рівні ієрархи класів.
Зауваження. Головним класом в ієрархії класів Java є клас object, який містить тільки загальні властивості всіх класів.
У мові Java творець класу може гарантувати ініціалізацію кожного об'єкта за допомогою спеціального методу — конструктора. Якщо в класі існує конструктор, Java автоматично викликає його при створенні об'єкта. Таким чином, ініціалізація гарантована. Конструктор — це метод, ім'я якого точно збігається з іменем класу. Кожний конструктор має розглянуті далі особливості:
> Конструктор існує в будь-якому класі. Якщо конструктор не записаний, то компілятор Java його створює за замовчуванням.
Цей конструктор нічого не робить, а лише викликає конструктора суперкласу.
> Конструктор виконується автоматично при створенні примірника класу, після розподілу пам'яті та обнулення полів, але до початку використання створеного об'єкта.
> Конструктор не повертає ніякого значення, тому в його опису відсутнє void, але може бути один із трьох модифікаторів доступу: public, protected, private.
> Конструктор не є звичайним методом, членом класу, тому його не можна успадкувати або перевизначити в класі.
> Тіло конструктора може починатися:
словом super () із параметрами в дужках, якщо вони потріб ні, викликається один із конструкторів суперкласу;
словом this () з параметрами в дужках, якщо вони потрібні, викликається другий конструктор того самого класу.
Якщо метод super() на початку конструктора відсутній, то, по-перше, виконується конструктор суперкласу без аргументів, а по-друге — ініціалізація полів значеннями при оголошенні останніх, а потім тим, яке записано в конструкторі.
Для виділення пам'яті масивам і об'єктам використовується операція new.
Наприклад:
Double a[] = new double[100];
— тип елемента масиву і кількість його елементів у квадратних дужках.
Результатом операції new є посилання на створений об'єкт. Це посилання може бути присвоєне змінній типу посилання на даний тип:
Dog к5 = new Dog(); або безпосередньо new Dog(). voice ();
Після створення об'єкта без імені відразу виконується його метод voice().
Одним із головних методів, характерний для будь-якої програми мовою Java, є метод з ім'ям main(). Метод main() викликається автоматично системою Java із самого початку виконання додатка. Інтерпретатор отримує клас, де міститься метод mam(), і починає з нього виконання програми.
З метою налагодження метод main() заносять до кожного класу програми. Для перевірки роботи всіх методів класу в метод main() включають тести.
Наприклад: class Prim { public static void main (String[] args)
for (int і = 0; i<args.lenght;i++) System.out.println("args["+i+” ] = "+args[i]);
}
}
Тут програма виводить параметри, які передаються в методі main() при запуску. У методі main() можна передати кілька параметрів, які інтерпретатор заносить у масив рядків. Ці параметри розміщуються безпосередньо після імені класу в рядку виклику Java.
Теорія ООП радить з'ясувати, в якому відношен ні перебувають класи А і В: клас В є примірником класу А або клас В —- частина класу А
Питання і завдання
Оголошення статистичних змінних.
Область бачення та ініціалізація змінних.
Вкладені класи різних рівнів.
Чи успадковуються вкладені класи?
Як з підкласу звернутися до методу суперкласу?
Чи можуть вкладені класи бути розширенням інших класів?