Створення власних класів в java властивості, методи, конструктори
Теоретичні матеріали і завдання по Java
Створення класу: властивості і методи
Розглянемо приклад створення найпростішого класу. Давайте з його допомогою змоделюємо окружності на координатної площині.
Кожна така окружність, як відомо, буде визначатися своїм центром (тобто крапкою з двома числовими координатами) і радіусом (тобто його довжиною, що подається у вигляді числа). Таким чином, коло на координатної площині характеризують 3 дійсні числа. Значить в нашому класі повинно бути три відповідних властивості.
Ще не будемо намагатися вирішувати серйозних завдань за допомогою класу, а наділимо його наступними можливостями: створену на основі класу окружність має бути можна зробити висновок на екран (у вигляді опису її характеристик), переміщати (тобто здійснювати перетворення руху, змінюючи координати її центру ) і масштабувати (тобто здійснювати перетворення подібності, змінюючи радіус кола).
конструктори
Коли ми створюємо об'єкт командою Circle o1 = new Circle (); використовується так званий конструктор за замовчуванням (або конструктор без параметрів) - це спеціальний метод класу, ми його не визначали явно, але навіть якщо його не визначити він створюється автоматично, виконується при створенні кожного нового об'єкта і привласнює початкові значення його властивостям (инициализирует їх) . Значення за замовчуванням для властивостей залежать від їх типу (0 або 0.0 для Чілова типів, false для логічного типу і т.д.).
Конструктор за замовчуванням можна описати явно і при цьому поставити началльние значення для властивостей нового об'єкта, відмінні від значень за замовчуванням.
Від інших методів конструктор відрізняється тим, що має те ж саме ім'я, що і весь клас, а також не має типу значення, що повертається (по суті, в результаті своєї роботи конструктор повертає новий об'єкт потрібного класу).
Оскільки методи можна перевантажувати, а конструктор є методом, то за допомогою перевантаження можна створити додаткові варіанти конструкторів. Наприклад, зручно мати конструктор, який дозволить при створенні об'єкта явно вказувати координати його центру і довжину радіуса.
Описати подібний конструктор можна на додаток до основного наступним чином:
Тепер при створенні об'єктів можна користуватися будь-яким конструктором на вибір:
Потрібно враховувати наступний факт: якщо в класі описаний явно хоча б один конструктор з параметрами, то конструктор за замовчуванням (без параметрів) створюватися автоматичні вже не буде (його в такій ситуації треба описувати явно). Хоча, якщо вам потрібно тільки конструктор з параметрами (як другий з нашого прикладу), то можна обійтися і зовсім без конструктора за замовчуванням (описати в класі тільки один конструктор з параметрами).
Доступ до членів класу з тіла методів
Додамо в наш клас метод, що обчислює площу тієї окружності, до якої метод застосований. Метод буде описувати так:
Результат роботи методу можна побачити в такий спосіб:
Зверніть увагу: всередині кожного методу класу доступні властивості того об'єкта, для якого метод буде викликатися. Тобто якщо ми викликаємо метод для об'єкта o2, то всередині методу при його виконанні ми будемо працювати саме з властивостями об'єкта o2 (o2.x буде доступно x, o2.r буде доступно як r і т.д.).
Може виникнути ситуація, коли для формальних параметрів методу ви захочете використовувати імена вже належать властивостей класу.
Наприклад, можна було б почати опис методу для масштабування таким чином:
Як же в такому випадку звертатися до властивостей об'єкта (адже імена цих властивостей перекриваються формальним параметром)?
Рішення такої неоднозначності існує: до будь-якого властивості всередині методу можна звертатися не тільки по імені, але і через посилання this. Тобто всередині методу можна написати x = 13 ;. а можна this.x = 13; - ефект буде ідентичний. Відповідно, коли ім'я формального параметра перекриває ім'я властивості, до імені властивості потрібно звертатися через посилання this. Тоді метод можна переписати таким чином:
Зрозуміло, що зручніше не допускати перекривання імен властивостей іменами локальних параметрів в методах. Іноді, втім, потрібно всередині методу застосувати якийсь інший метод до поточного об'єкту, тоді без посилання this не обійтися.
Додамо до класу метод, який перевіряє, чи збігаються дві окружності по площі.
У цьому методі повинні брати участь два об'єкти: той, для якого метод викликаний і другий учасник порівняння, який може бути переданий в метод через параметр. При цьому параметр буде мати відповідний тип (не якийсь вбудований, а у вигляді класу Circle).
Метод можна описати так:
Приклад використання методу:
- Створіть в класі Circle метод, що обчислює довжину кола.
- Створіть в класі Circle метод, що переміщає центр кола в випадкову точку квадрата координатної площини з діагоналлю від [-99; -99] до [99; 99]. Зверніть увагу на те, що потрібно створити звичайний метод, який можна застосовувати до вже існуючого об'єкта, а не конструктор створює новий об'єкт.
- Змініть в класі Circle конструктор за замовчуванням так, щоб в момент створення об'єкту з його допомогою, координати центру і радіус кола користувач вводив з клавіатури.
- Створіть в класі Circle метод, що обчислює відстань між центрами двох кіл.
- Створіть в класі Circle метод, який перевіряє, чи стосуються окружності в одній точці. Врахуйте, що можливий варіант, коли одна окружність міститься всередині іншої і при цьому все одно можливо дотик в одній точці.