Page 232 - 6253
P. 232
}
public Exception getHiddenException() {
return _hidden;
}
}
Однією з основних концепцій мови Java є повторне використання
програмного коду, тому розробники постаралися передбачити і закодувати усі
можливі виняткові ситуації. Тому під час написання реальних програм можна
цілком обійтися без створення власних класів винятків.
9.5 Наслідування та виняткові ситуації
Створення складних розподілених систем рідко обходиться без використання
концепції наслідування та обробки виняткових ситуацій. Для винятків, що
передбачають перевірку існує два наступних правила:
перевизначений метод у підкласі не може містити в блоці throws винятків,
які не обробляються у відповідному методі суперкласу;
конструктор підкласу повинен включити у свій блок throws усі класи
винятків або їх суперкласи з блоку throws конструктора суперкласу, до
якого він звертається при створенні об'єкта.
Перше правило має безпосереднє відношення до розширення програмного
додатку. Нехай при додаванні в ланцюжок спадкування нового класу його
поліморфний метод включив в блок throws новий виняток, що перевіряється. Тоді
методи, що реалізують логіку програми, приймаючи об'єкт нового класу як параметр
і викликаючи даний поліморфний метод, не готові виконувати обробку нової
виняткової ситуації, оскільки раніше в цьому не було необхідності. Тому при спробі
додавання нового checked-винятка в поліморфний метод компілятор видасть
повідомлення про помилку.
// Спільне використання поліморфізму та виняткових ситуацій
class Stone { // Старий клас
public void build() throws FileNotFoundException {
// Реалізація методу
231