Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Конструктори

ЗАУВАЖЕННЯ

Ім'я вихідного файлу Java повинне відповідати імені зберігаючого в ньому класу. Регістр букв важливий і в імені класу, і в імені файлу.

 

Клас - це шаблон для створення об'єкта. Клас визначає структуру об'єкта і його методи, що утворюють функціональний інтерфейс. У процесі виконання Java-програми система використовує визначення класів для створення представників класів. Представники є реальними об'ектамі.Терміни «представник», «екземпляр» та «об'єкт» взаємозамінні. Нижче наведена загальна форма визначення класу.

class ім'я_класу extends ім'я_суперкласу { type змінна1 об'єкта:

 

type змінна2 об'єкта:

 

type зміннаn об'єкта:

 

type ім'я методу1(список параметрів) { тіло методу;

 

}

type ім'я методу2(список параметрів) { тіло методу;

 

}

 

type ім'я методуM (список параметрів) тіло методу;

}

}

 

Ключове слово extends вказує на те, що «ім'я класу» - це підклас класу «ім'я суперкласу». На чолі класової ієрархії Java стоїть єдиний її вбудований клас - Object. Якщо ви хочете створити підклас безпосередньо цього класу, ключове слово extends і наступне за ним ім'я суперкласу можна опустити - транслятор включить їх у ваше визначення автоматично. Прикладом може служити клас Point, наведений раніше.

 

1. Змінні представників (instance variables)

 

Дані інкапсулюються в клас шляхом оголошення змінних між відкриваючих і закриваючих фігурними дужками, що виділяють у визначенні класу його тіло. Ці змінні оголошуються точно так само, як оголошувалися локальні змінні в попередніх прикладах. Єдина відмінність полягає в тому, що їх треба оголошувати поза методів, в тому числі поза методу main. Нижче наведено фрагмент коду, в якому оголошено клас Point з двома змінними типу int.

 

class Point { int х, у;

}

 

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

 

Оператор New

Оператор new створює екземпляр вказаного класу і повертає посилання на новостворений об'єкт. Нижче наведено приклад створення і присвоювання змінної р екземпляра класу Point.

 

Point р = new Point();

 

Ви можете створити декілька посилань на один і той же об'єкт. Наведена нижче програма створює два різних об'єкта класу Point і в кожний з них заносить свої власні значення. Оператор точка використовується для доступу до змінних і методів об'єкта.

 

class TwoPoints {

public static void main(String args[]) {

Point p1 = new Point();

Point p2 = new Point();

p1.x = 10;

p1.y = 20;

р2.х = 42;

р2.у = 99;

System.out.println("x = " + p1.x + " у = " + p1.y);

System.out.println("x = " + р2.х + " у = " + р2.у);

} }

 

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

 

С:\> Java TwoPoints

х = 10 у = 20

х = 42 у = 99

 

 

Зауваження

Оскільки при запуску інтерпретатора ми вказали в командному рядку не клас Point, а клас TwoPoints, метод main класу Point був повністю проігнорований. Додамо в клас Point метод main і, тим самим, отримаємо закінчену програму.

 

class Point { int х, у;

public static void main(String args[]) {

Point p = new Point();

р.х = 10;

p.у = 20;

System.out.println("x = " + р.х + " у = " + p.y);

} }

 

2. Оголошення методів

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

 

тип імя_метода (список формальних параметрів) {

 

тіло методу:

 

}

 

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

 

class Point { int х, у;

void init(int a, int b) {

х = а;

У = b;

} }

 

Виклик методу

 

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

 

3. Приховування змінних представників

 

У мові Java не допускається використання в одній або у вкладених областях видимості двох локальних змінних з однаковими іменами. Цікаво відзначити, що при цьому не забороняється оголошувати формальні параметри методів, чиї імена збігаються з іменами змінних представників. Давайте розглянемо як приклад іншу версію методу init, в якій формальним параметрам дані імена х і у, а для доступу до однойменних змінним поточного об'єкта використовується посилання this.

 

class Point { int х, у;

void init(int х, int у) {

this.x = х;

this.у = у } }

class TwoPointsInit {

public static void main(String args[]) {

Point p1 = new Point();

Point p2 = new Point();

p1.init(10,20);

p2.init(42,99);

System.out.println("x = " + p1.x + " у = •• + p-l.y);

System.out.printlnC'x = " + p2.x + " у = •• + p2.y);

} }

 

 

Конструктори

 

Конструктор - це метод класу, який ініціалізує новий об'єкт після його створення. Ім'я конструктора завжди збігається з ім'ям класу, в якому він розташований (також, як і в C + +). У конструкторів немає типу возвращаемого результату - ніякого, навіть void. Замінимо метод init з попереднього прикладу конструктором.

 

class Point { int х, у;

Point(int х, int у) {

this.x = х;

this.у = у;

} }

class PointCreate {

public static void main(String args[]) {

Point p = new Point(10,20);

System.out.println("x = " + p.x + " у = " + p.у);

} }

 

Програмісти на Pascal (Delphi) для позначення конструктора використовують ключове слово constructor.

 

5. Поєднання методів

Мова Java дозволяє створювати кілька методів з однаковими іменами, але з різними списками параметрів. Така техніка називається суміщенням методів (method overloading). Як приклад наведена версія класу Point, в якій поєднання методів використано для визначення альтернативного конструктора, який ініціалізує координати х і у значеннями за умовчанням (-1).

 

class Point { int х, у;

Point(int х, int у) {

this.x = х;

this.у = у;

}

Point() {

х = -1;

у = -1;

} }

class PointCreateAlt {

public static void main(String args[]) {

Point p = new Point();

System.out.println("x = " + p.x + " у = " + p.y);

} }

 

У цьому прикладі об'єкт класу Point створюється не при виклику Перший конструктор, як це було раніше, а за допомогою другого конструктора без параметрів. Ось результат роботи цієї програми:

С:\> java PointCreateAlt

х = -1 у = -1

ЗАУВАЖЕННЯ

 

Рішення про те, який конструктор потрібно викликати в тому чи іншому випадку, приймається відповідно до кількості і типом параметрів, зазначених в операторі new. Неприпустимо оголошувати в класі методи з однаковими іменами і сигнатурами. У сигнатурі методу не враховуються імена формальних параметрів враховуються лише їх типи і кількість.


Дата добавления: 2015-10-29; просмотров: 108 | Нарушение авторских прав


Читайте в этой же книге: Структура пакета Java 2 SDK. | Принципы объектно-ориентированного программирования. | Исключительные ситуации, их классификация и различия. |
<== предыдущая страница | следующая страница ==>
Интерфейсные компоненты пользователя.| Спадкування

mybiblioteka.su - 2015-2024 год. (0.012 сек.)