Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпори JAVA.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
178.34 Кб
Скачать

26. Ключові слова this і super.

Якщо виконання коду відбувається в динамічному контексті, то має бути об'єкт,

асоційований з ним. У цьому випадку ключове слово this повертає посилання на цей

об'єкт:

class Test {

public Object getThis() {

return this; // Проверим, куда указывает эта ссылка

}

public static void main(String s[]) {

Test t = new Test();

System.out.println(t.getThis()==t); // Сравнение

}

}

Результатом роботи програми буде: true

Тобто, всередині методів слово this повертає посилання на об'єкт, у якого цей метод

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

Інше застосування this розглядалося у випадку "затемняющих" оголошень:

class Human {

private String name;

public void setName(String name) {

this.name=name;

}

}

Слово this можна використовувати для звернення до полів , які оголошуються нижче. Нарешті , слово this застосовується в конструкторах для явного виклику в першому рядку іншого конструктора цього ж класу. Там же може застосовуватися і слово super , тільки вже для звернення до конструктора батьківського класу . Інші застосування слова super також пов'язані із зверненням до батьківського класу об'єкта. Наприклад , воно може знадобитися в разі перевизначення ( overriding ) батьківського методу . Перевизначенням називають оголошення методу , сигнатура якого збігається з одним із методів батьківського класу . Часто бувають випадки , коли при перевизначенні було б корисно скористатися результатом роботи батьківського методу . Припустимо , він робив складні обчислення , а перевизначення метод повинен повернути округлений результат цих обчислень . Зрозуміло , що набагато зручніше якось звернутися до батьківського методу , ніж заново описувати весь алгоритм . Тут застосовується слово super .

27. Ключове слово abstract.

Іноді буває зручним описати тільки заголовок методу , без його тіла , і таким чином оголосити , що такий метод буде існувати в цьому класі. Реалізацію цього методу , тобто його тіло , можна описати пізніше.

Розглянемо приклад. Припустимо , необхідно створити набір графічних елементів , неважливо , яких саме. Наприклад , вони можуть являти собою геометричні фігури - коло , квадрат , зірка і т.д.; або елементи призначеного для користувача інтерфейсу - кнопки , поля введення і т.д. Зараз це не має вирішального значення. Крім того , існує спеціальний контейнер , який займається їх отрисовкой . Зрозуміло , що зовнішній вигляд кожної компоненти унікальний, а значить , відповідний метод ( назвемо його paint ( )) буде реалізований в різних елементах по- різному.

Але в той же час у компонент може бути багато спільного. Наприклад , будь-яка з них займає деяку прямокутну область контейнера. Складні контури фігури необхідно вписати в прямокутник , щоб можна було аналізувати перекриття , перевіряти , чи не вилазить компонент за кордону контейнера , і т.д. Кожна фігура може мати колір , яким її треба малювати , може бути видимою , або невидимою і т.д. Очевидно , що корисно створити батьківський клас для всіх компонент і один раз оголосити в ньому всі загальні властивості , щоб кожна компонента лише успадковувала їх.

Але як вчинити з методом отрисовки? Адже батьківський клас не представляє собою будь-яку фігуру, у нього немає візуального представлення. Можна оголосити метод paint ( ) у кожній компоненті незалежно. Але тоді контейнер повинен буде володіти складною функціональністю , щоб аналізувати , яка саме компонента зараз обробляється , виконувати приведення типу і тільки після цього викликати потрібний метод .

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]