Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об'єктно орієнтовне програмування1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.38 Mб
Скачать

6. Успадкування в java та його особливості

1. Ініціалізація і завантаження класів.

2. Ініціалізація базового класу.

3. Забезпечення правильного завершення та прихо-вування імен при успадкуванні.

4. Розробка по кроках, перетворення типів при зростанні.

Завдання для самостійного опрацювання теми

1. Створити два класи з іменами А та В, із конструкторами за змовчуванням (порожні списки параметрів), які оголошують про своє виконання. Успадкувати новий клас С від А і створити член класу В усередині класу С. Створити об'єкт класу С. (Не визначайте конструктор для класу С). Створити об'єкт для класу С і переглянути результат.

2. Створити простий клас. У другому класі визначити поле для об'єкта першого класу. Використовувати ліниву ініціалізацію для створення цього класу.

3. Успадкувати від класу Detergent новий клас. Перевизначити метод scrub() і додати новий метод з ім'ям sterilize().

4. Створити базовий клас з єдиним конструктором не за замовчуванням і похідний клас із конструктором і за замовчуванням, і з параметрами.

У конструкторі похідного класу викликати конструктор базового класу.

5. Створити клас Root, який містить примірники кожного з класів (також створеними вами) сотрі, сотр2, сотрЗ. Створити клас Stem від класу Root так, щоб у ньому містилися примірники кожного зі щойно названих класів. У всіх класах має бути конструктор, який виводить повідомлення про свій клас.

6. Створити клас із методом, який був перевантажений тричі. Успадкувати новий клас, додати ще один перевантажений метод і показати, що всі чотири методи доступні в похідному класі.

7. У файлі Car.Java додати метод service() до класу Engine і викликати цей метод із методу main().

8. Створити клас у пакеті. Цей клас має містити метод зі специфікатором protected. Поза пакетом спробувати викликати метод protected та пояснити, що відбувається. Потім успадкувати від вашого класу і викликати метод protected з іншого методу вашого похідного класу.

9. Створити клас з ім'ям Amfibia. Від цього класу успадкувати клас Frog.

На ваш розсуд у базовому класі розмістити кілька методів. У методі main() створити об'єкт Frog, виконати перетворення, аналогічне до Amfibia, довести що всі методи працюють.

10. Створити клас з незмінним (final) методом. Успадкувати від цього класу і спробувати перевизначити цей метод.

7. Динамічне зв'язування (поліморфізм)

1. Зв'язування (метод-виклик).

2. Перевизначення чи перевантаження?

3. Абстрактні методи і класи.

4. Конструктори і поліморфізм.

Завдання для самостійного опрацювання теми

Маємо програму: Shapes.java

class Shape {

void draw() {}

void erase() {}

}

class Circle extends Shape {

void draw() {

System. out.println(«Circle. Draw()»);

}

void erase() {

System.out.println(«Circle. Erase()»);

}

}

class Square extends Shape {

void draw() {

System.out.println(«Square.draw() »);

}

void erase() {

System.out.println(«Square.erase() »);

}

}

class Triangle extends Shape {

void draw() {

System. out.println(«Triangle. draw()»);

void erase() {

System. out.println(«Triangle. erase()»);

}

}

public class Shapes {

public static Shape randShape() {

switch ((int) (Math, random () *3)) {

default:

case 0: return new Circle();

case 1: return new Circle();

case 2: return new Circle();

}

}

public static void main(String[] args) {

Shape[s = new Shape[9];

for (int i=0;i<s. length; i++)

s[i] = randShape();

for (int i=0;i<s. length; i++)

s[i].draw();

}

}III:~

1. До базового класу програми Shapes.java додати новий метод, який друкує повідомлення, але не перевизначати його в похідних класах.

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

По завершенні перевизначити метод для всіх похідних класів.

2. Додати новий підтип Shape до програми Shapes.java і перевірити методом main(), що поліморфізм робить правильно щодо вашого нового типу, як і стосовно старих типів.

3. Створити ієрархію успадкування. За основу взяти різноманітні типи викладачів. Базовим класом буде Vicld (викладач), а похідними класами будуть Prof (професор), Docent (доцент) тощо.

У базовому класі визначити декілька загальних методів, які потім перевизначити в похідних класах для того, щоб вони виконали дії, характерні для визначеного типу об'єкта. Створити масив з об'єктів Vicld, заповнити його різноманітними похідними типами і викликати методи базового класу, щоб побачити результати роботи програми.

4. У завданні 3 зробити так, щоб клас Vicld став абстрактним (abstract) класом. Зробити також деякі методи класу Vicld абстрактними (там, де це має сенс).

5. Створити клас і зробити його abstract таким, щоб він не мав ні єдиного абстрактного методу. Потім перевірити неможливість створення примірника цього класу.

6. Створити трирівневу ієрархію успадкування. У кожному класі ієрархії повинен бути метод finalize(), який викликає метод finalize() базового класу. Показати, що ваша ієрархія працює.

7. Створити базовий клас із двома методами. Із першого методу викликати другий. Успадкувати клас і перевизначити другий метод. Створити об'єкт похідного класу, виконати аналогічне перетворення щодо базового типу і викликати перший метод. Пояснити події, що відбуваються.

8. Створити базовий клас із визначенням методу abstract print(), який перевизначається похідними класами. Перевизначена версія методу виводить значення цілого числа int, описаного в похідному класі.

У точці визначення цієї змінної потрібно надати їй нульового значення. У конструкторі базового класу викликати цей метод, у методі mam() — створити об'єкт похідного типу, а потім викликати його метод print(). Пояснити події, що відбуваються.

9. Створити абстрактний клас без методів. Утворити від нього клас, додати метод. Створити статичний метод, який має параметр — вказівку на базовий клас. Виконати низхідне перетворення до похідного типу і викликати цей метод. У методі main() показати, як це працює. Після цього розмістити в базовому класі абстрактне визначення методу, щоб необхідність у низхідному перетворенні відпала.

10. Задачу 3 змінити так, щоб програма демонструвала порядок ініціалізації базових і похідних класів. Потім додати об'єкти-члени і до базових і до похідних класів і показати, в якому порядку відбувається їх ініціалізація при конструюванні об'єкта.