Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java.doc
Скачиваний:
5
Добавлен:
17.04.2019
Размер:
261.63 Кб
Скачать

Успадкування та інтерфейс

З синтаксису опису класу ми можемо побачити, що кожен клас може бути нащадком (підкласом) іншого класу (суперкласу). За допомогою спадкування можна створювати класи, які будуть розширювати можливості суперкласів. Підкласи будуть містити всі поля та методи суперкласу. Успадкування класів здійснюється з допомогою ключового слова extends після якого іде назва суперкласу. Java спадкування може бути тільки від одного суперкласу. При спадкуванні класів необхідно враховувати модифікатори полів та методів.

Іноді бувають ситуації, коли нам необхідно визначити клас, в якому буде визначена структура певної абстракції (поля, методи) але відсутня повна реалізація цих методів. В такому випадку клас повинен мати ідентифікатор abstract. Для використання таких абстрактних класів в нащадках даного класу необхідно реалізувати ті методи, які не реалізовані в абстрактному класі. Приклад:

Public void callme (); //нереалізований метод

Public void callmefoo()

{………………………

……………………….

………………………..

}

Class B extends A

{………………….

Public void callme()

{………………….

……………………

}

……………………

}

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

Інтерфейси дещо подібні до абстрактних класів, однак в них не повинно бути жодного реалізованого методу, а також всі поля класу повинні мати ідентифікатор final або static. Синтаксис опису інтерфейсу:

Модифікатор interface ім‘я extends ім‘я інтерфейсу

{

Модифікатор тип ім‘я поля1=значення1;

…………………………………………….

Модифікатор тип ім‘я поляN=значенняN;

}

По замовчуванню інтерфейс буде мати ідентифікатор public. Всі поля та методи мають той же самий тип доступу. Як бачимо з синтаксису опису інтерфейсу, він може бути нащадком від іншого інтерфейсу. Наведемо приклад використання інтерфейсу та абстрактного класу.

Interface Run

{

Int MIN=0;

Int MAX=10;

Void move();

Float fast();

}

Abstract class People implements Run

{

Int age;

People(int x)

{age=x}

Public void move()

{

System.out.println(“People move …”)

}

}

Class NewPeople extends People

{

NewPeople(int x)

{super(x);}

Public float fast()

{return (float) age/max;}

}

Class Rmige implements Run

{

Float longest;

Rmiga(float x)

{longest=x;}

Public void move()

{system.out.println(“Rmiga moves herecontion”)}

Public float Fast()

{return (float) (longest*0,1/MAX)}

}

Class Demo

{

Public static …..

………………

}

Інтерфейси являються java варіантом спадкування від багатьох класів.

Перевизначення методів

Методи інтерфейсів та класів визначають набір параметрів, які необхідні передавати при їх виклику. Тому, якщо визначити новий метод з тим самим ім‘ям, але іншим набором параметрів, то старий метод не буде перегружений. Це ніби створення зовсім інших методів. Зовсім інша ситуація виникає, коли сигнатури методів повністю співпадають. В такому випадку відбувається перевантаження методів. Іноді виникають випадки, коли всередині заданого методу необхідно звернутись до реалізації цього ж методу, це можна здійснити використавши ключове слово super. Однак при використанні super необхідно враховувати модифікатори, які знаходяться в батьківському класі.

Звернення до полів та методів в java здійснюється з допомогою оператора крапка. Для звернення необхідно вказати (ім’я класу . ім’я поля або методу). Іноді виникає ситуація, коли класу необхідно звернутись до самого себе. В таких випадках використовують ключове слово this. В загальному випадку існує 2 ситуації, коли використовується ключове слово:

  1. коли всередині деякого методу існують 2 змінні з однаковими ім’ям. Одна з них являється полем класу, а друга – зміна всередині методу.

  2. тоді, коли об’єкт звертаючись до якогось методу хоче передати цьому методу посилання на самого себе.

Class Demo {

Int x;

Fff(int x) {

This.x=x;

}

}

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

Система вводу-виводу в java

Система вводу-виводу в java реалізована на основі системи використання потоків вводу-виводу. Більшість потоків вводу-виводу реалізовані як нащадки двох абстрактних класів: InputString i OutString. Проте ці класи лише реалізують загальні властивості для всіх потоків.

Розглянемо деякі нащадки заданих класів. До найбільш важливих потоків вводу-виводу належать:

  • FileImputStream/ FileOutputStream

  • /ButeArrayOutputStream

Клас FileImputStream використовується для зчитування даних з файлів. Даний клас має 2 конструктора: FileImputStream(String a) та FileImputStream(String a). Наведемо приклади використання даних конструкторів:

FileImputStream fin = new FileImputStream(“c:\\helloworlw”);

ImputStream fin = new FileImputStream;

File path = new File(“c:\\...”);

Imput

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