
- •1. Історія створення Java.
- •2. Історія розвитку Java
- •3.Опишіть поняття “об’єкт”
- •4. Опишіть поняття “клас”
- •5. Опишіть типи відношень між класами
- •6. Переваги і недоліки об’єкто-зорієнтованого програмування
- •7. Опишіть правила побудови ідентифікаторів мови Java, наведіть приклади
- •8. Поняття літералів. Приклади
- •9. Оператори та операції в мові Java
- •11. Типи даних у мові Java
- •12. Клас Object
- •13. Клас String
- •14. Клас Class
- •15. Імена в Java
- •16. Пакети в Java
- •17. Область видимості імен
- •18.Об’ява класів у Java
- •19.Приведення типів у Java
- •21.Приведення посилальних типів даних.
- •22.Приведення до рядка.
- •23.Заборонені приведення.
- •24.Застосування приведення типів.
- •25.Статичні елементи.
- •26. Ключові слова this і super.
- •27. Ключове слово abstract.
- •28. Поняття інтерфейсів.
- •29. Поліморфізм.
- •30. Масиви в Java.
- •31. Приведення типів для масивів.
- •32. Клонування масивів.
- •33. Керування ходом виконання програми.
- •34. Нормальне і перерване виконання операторів.
- •35. Блоки і локальні змінні.
- •36. Порожній оператор.
- •38. Синтаксис оператора if.
- •39. Синтаксис оператора switch.
- •40. Керування циклами.
- •41.Синтаксис оператора while
- •42.Ситаксис оператора do
- •43.Синтаксис оператора for
- •44.Оператори break I continue
- •45.Іменовані блоки
- •46. Оператор return
- •47. Оператор synchronized
- •48. Помилки при роботі програми. Виняткові ситуації
- •48. Помилки при роботі програми. Виняткові ситуації
- •49.Причини виникнення помилок
- •50.Обробки виняткових ситуацій
- •51.Конструкція try-catch-finally
- •52.Використання оператора throw
- •53.Виняткові ситуації, які перевіряються і які не перевіряються
- •54.Створення класів користувача обробки виняткових ситуацій
- •55.Поняття потокв в Java
- •56.Базові класи для роботи з потоками
- •57.Класс Thread
- •58. Інтерфейс Runnable
- •60. Потоки-демони
- •61.Синхронізація роботи потоків.
- •62.Класи обгортки для примітивних типів.
- •63.Клас Math.
- •66.Клас Calendar.
- •67.Клас TimeZone.
- •68. Колекції java
- •69.Інтерфейс Collection.
- •70.Інтерфейс Set.
- •71.Інтерфейс List.
- •72.Інтерфейс Map.
- •73.Інтерфейс SortedSet.
- •74.Інтерфейс SortedMap.
- •75.Інтерфейс Iterator.
- •76.Конкретні класи колекцій.
- •77.Клас Properties.
- •78. Інтерфейс Comparator.
- •79.Клас BitSet.
- •80.Клас Random.
- •81.Система введення/виведення. Потоки даних.
- •82.Класи реалізації потоків даних.
- •84. Робота із файловою системою.
- •59. Робота із пріоритетами потоків
28. Поняття інтерфейсів.
Концепція абстрактних методів дозволяє запропонувати альтернативу множинного спадкоємства . У Java клас може мати тільки одного батька , оскільки при множині спадкування можуть виникати конфлікти , які серйозно заплутують об'єктну модель. Наприклад , якщо у класу є два батьки , які мають однаковий метод з різною реалізацією , то який з них успадкує новий клас ? І як працюватиме функціональність батьківського класу , який позбувся свого методу ? Всі ці проблеми не виникають у разі , якщо успадковуються тільки абстрактні методи від декількох батьків. Навіть якщо буде успадковано кілька однакових методів , все одно у них немає реалізації , і можна один раз описати тіло методу , яке буде використано при виклику будь-якого з цих методів . Саме так влаштовані інтерфейси в Java. Від них не можна породжувати об'єкти , але інші класи можуть реалізовувати їх.
Оголошення інтерфейсів дуже схоже на спрощене оголошення класів .
Оголошення починається з заголовка. Спочатку вказуються модифікатори . Інтерфейс може бути оголошений як public , і тоді він буде доступний для загального використання, або модифікатор доступу може не вказуватися , в цьому випадку інтерфейс доступний тільки для типів свого пакета. Модифікатор abstract для інтерфейсу не потрібно, оскільки всі інтерфейси є абстрактними , його можна вказати , але рекомендується цього не робити, щоб не захаращувати код . Далі записується ключове слово interface та ім'я інтерфейсу . Після цього може слідувати ключове слово extends і список інтерфейсів , від яких буде успадковуватися і оголошений інтерфейс. Батьківських типів може бути багато , головне , щоб не було повторень, і щоб ставлення спадкування не утворювало циклічної залежності.
public interface Drawble extends Colorable, Resizable {
}
Тіло інтерфейсу складається з оголошення елементів, тобто полів-констант і абстрактних методів. Всі поля інтерфейсу повинні бути public final static, тому ці модифікатори вказувати необов'язково і навіть не бажано, щоб не захаращувати код. Оскільки поля оголошуються фінальними, необхідно їх відразу ініціалізувати.
public interface Directions {
int RIGTH=1;
int LETFT=2;
int UP=3;
int DOWN=4;
}
29. Поліморфізм.
Поліморфізм – це правило, що дозволяє визначити, чи варто конкретної ситуації застосовувати успадкування чи ні. Якщо між об'єктами існує відношення «є» («is - a»), то кожен об'єкт підкласу є об'єктом суперкласу. Наприклад, кожен менеджер є співробітником. Отже, має сенс зробити клас Manager подклассом класу Employee. Природно, зворотне твердження невірно - не кожен співробітник є менеджером.
Інший спосіб - принцип підстановки. Цей принцип свідчить , що об'єкт підкласу можна використовувати замість будь-якого об'єкта суперкласса.Напрімер , об'єкт підкласу можна привласнити змінної суперкласу:
Employee e;
e = new Employee(...); // Объект класса Employee
e = new Manager(...); // Можно и так
У мові Java об'єктні змінні є поліморфними. Змінна типу Employee може посилатися як на об'єкт Employee, так і на об'єкт будь-якого підкласу класу Employee (наприклад, Manager, Executive, Secretary тощо).
Manager boss = new Manager(...);
Employee[] staff = new Employee[3];
staff[0] = boss;
Тут змінні staff [0] і boss посилаються на один і той же об'єкт. Однак змінна staff [0] розглядається компілятором тільки як об'єкт Employee. Це означає, що допускається наступний виклик:
boss.setBonus(5000); // Ок
Справа в тому, що змінна staff [0] оголошена як об'єкт Employee, а методу setBonus () у цьому класі немає. Однак привласнити посилання на об'єкт суперкласу змінної підкласу неможливо. Наприклад, наступний оператор є неприпустимим:
Manager m = staff[i]; // Ошибка
Причина очевидна: не всі співробітники є менеджерами. Якби це привласнення виявилося виконаним, і змінна м могла б посилатися на об'єкт Employee, який менеджером не є, то згодом виявився б можливим виклик методу m.setBonus (...), що призвело б до помилки при виконанні програми.