1 of 61

1

ЛЕКЦІЯ №9.

Парадигми об’єктно-орієнтованого програмування. Наслідування та абстракція

Викладач: PhD, Юлія Назар

Програмування на java

2 of 61

2

Парадигми ООП

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

Принципи ООП

Поліморфізм

Інкапсуляція

Наслідування

Абстракція

3 of 61

3

agenda

  • Наслідування. Клас Object
  • Абстракція: абстрактні класи та інтерфейси

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

4 of 61

4

Наслідування

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

5 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Наслідування — це властивість, що дозволяє створити новий клас на основі існуючого з частковим або повним запозиченням характеристик. Це дозволяє впорядкувати класи в ієрархії, яка представляє відносини типу "is-a" (є типом/є різновидом). Наприклад, "Автомобіль" є різновидом "Транспортного засобу".

Наслідування - це механізм у програмуванні, у тому числі і в Java, який дозволяє описати новий клас на основі вже існуючого. Клас-спадкоємець при цьому отримує доступ до полів та методів батьківського класу.

6 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

ПРИКЛАД:

Що не є наслідуванням?

7 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

назва_дочірнього_класу extends назва_батьківського_класу {

...

}

Як унаслідуватись?

8 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

Приклад наслідування класів

class A {

int i, j;

void showij () {

System.out.println

(i+" "+j);

}

}

 

class B extends A {

int k;

void showk() {

System.out.println(k);

}

void sum() {

System.out.println

("Сума: " + (i+j+k));

}

}

class SimpleInheritance {

 

public static void main(String[] args) {

A superOb = new A();

B subOb = new B();

superOb.i = 10;

superOb.j = 20;

superOb.showij();

subOb.i = 7;

subOb.j = 8;

subOb.k = 9;

subOb.showij();

subOb.showk();

subOb.sum();

}

}

Результат:

10 20

7 8

9

Сума: 24

9 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

У мові Java відсутнє множинне успадкування: не можна успадкувати клас від двох класів. У кожного класу може бути лише один батьківський клас. Якщо батьківський клас не вказано, ним вважається клас Object.

10 of 61

СТАНОМ НА 01.02.2023

Наслідування

Існує два типи спадкування, які визначаються кількістю батьківських класів - одиночне і множинне.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

11 of 61

СТАНОМ НА 01.02.2023

Наслідування

Права доступу:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

12 of 61

СТАНОМ НА 01.02.2023

Наслідування

Можливості підкласів:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

13 of 61

СТАНОМ НА 01.02.2023

Наслідування

Можливості підкласів:

Ключове слово super

Ключове слово super – це зумовлене посилання на об'єкт суперкласу в тілі підкласу. Це ключове слово можна використовувати в конструкторах підкласу для явного звернення до конструкторів суперкласу. Основне призначення – ініціалізація закритих полів суперкласу.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

14 of 61

СТАНОМ НА 01.02.2023

Наслідування

Під час створення об'єкта підкласу завжди викликаються конструктори всіх його суперкласів. Наприклад, клас С успадковується від класу B, а клас В – від класу А; тоді класи А та В є суперкласами для класу С.

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

Правила виклику ланцюжків конструкторів:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

15 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклади:

Рез.: Cat constructor

British constructor

Рез.: Cat constructor – name Mulberry

British constructor

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

16 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклади:

Рез.: Cat default constructor

British constructor

Рез.: Помилка компіляції

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

17 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приховування/затінення полів

Якщо поле підкласу має те саме ім'я, що й успадковане поле суперкласу, воно приховує/затінює область видимості поля суперкласу, навіть якщо їх типи різняться.

Для звернення до поля суперкласу у підкласі використовується ключове слово super. Це друга форма застосування ключового слова super як посилання на об'єкт суперкласу в тілі підкласу. Вона має наступний синтаксис:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

18 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклад:

Рез.: 230

300

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

19 of 61

СТАНОМ НА 01.02.2023

Наслідування

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

Спадкування та перевизначення методів використовуються для реалізації відмінностей у поведінці суперкласу та підкласу. При спадкуванні класи додають нові поля та методи, чи перевизначають успадковані методи. 

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

20 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклади:

Рез.: Base

Derived

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

21 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклади:

Рез.: Information from Base

Information from Derived

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

22 of 61

СТАНОМ НА 01.02.2023

Наслідування

Приклади:

Рез.: Помилка компіляції

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

23 of 61

СТАНОМ НА 01.02.2023

Наслідування

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

24 of 61

Клас Object

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

25 of 61

СТАНОМ НА 01.02.2023

Клас Object

У корені ієрархії всіх класів знаходиться клас java.lang.Object, який є найзагальнішим із усіх класів. java.lang.Object є прабатьком (суперкласом) всіх об'єктів. Це початковий клас, з якого виготовлені всі інші класи. Методи, визначені в Object, дуже важливі, оскільки вони з'являються у кожному екземплярі кожного класу по всій Java.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

26 of 61

СТАНОМ НА 01.02.2023

Клас Object

Методи, які включає клас Object:

Такі методи, як toString(), equals(Object obj) і hashCode(), необхідно вивчити більш детально.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

27 of 61

СТАНОМ НА 01.02.2023

Клас Object

Метод toString()

Одним із важливих методів класу Object є метод toString(), який повертає рядкове подання об'єкта. У класу Object цей метод повертає рядок, який складається з:

  • імені класу
  • символ "@"
  • беззнакового шістнадцяткового подання хеш-коду об'єкта.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

28 of 61

СТАНОМ НА 01.02.2023

Клас Object

Приклад:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

29 of 61

СТАНОМ НА 01.02.2023

Клас Object

Метод equals()

Метод equals() класу Object перевіряє, чи еквівалентні два об'єкти. У реалізації цього методу використовується оператор порівняння на рівність (==).

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

30 of 61

СТАНОМ НА 01.02.2023

Клас Object

Приклад:

Рез.: true

false

false

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

31 of 61

СТАНОМ НА 01.02.2023

Клас Object

Метод hashCode()

Метод hashCode() повертає значення хеш-коду об'єкта. Цей метод визначено у класі Object. Тому кожен об'єкт має хеш-код, який визначається за замовчуванням.

Хеш об'єкта в Java - це ціле число, що генерується на основі застосування хеш-функції на конкретному об'єкті. Хеш-код можна розглядати як деякий шифр: якщо х і у – різні об'єкти, то з високим ступенем ймовірності повинні відрізнятися результати викликів x.hashCode() та y.hashCode().

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

32 of 61

СТАНОМ НА 01.02.2023

Клас Object

Приклад:

Рез.: 1484678

1484678

22052786

32487478

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

33 of 61

Абстракція: абстрактні класи та інтерфейси

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

34 of 61

Сухарик

СТАНОМ НА 01.02.2023

Абстракція: абстрактні класи та інтерфейси

Абстракція в об’єктно-орієнтованому програмуванні означає приховування деталей реалізації від кінцевих користувачів. В абстракції ви можете знати, які функціональні можливості системи, але ви не можете знати, як вони були реалізовані.

В Java для абстракції використовують абстрактні класи та інтерфейси.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

35 of 61

СТАНОМ НА 01.02.2023

Абстракція: абстрактні класи та інтерфейси

Отже, абстракція в ООП:

  1. Групування схожих операцій та даних.
  2. Спрощення за рахунок побудови вищого рівня абстракції.
  3. Можливість моделювати сутності реального світу.
  4. Ізоляція складності або спрощення за рахунок приховування деталей реалізації.
  5. Підвищення зручності читання та зрозумілості коду.
  6. Обмеження впливу змін.
  7. Локальність змін коду.

І як наслідок –зниження складності програми.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

36 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

Клас, який не може бути створений як об’єкт і може мати або не мати абстрактних методів, у Java називається абстрактним класом.

Абстрактний метод — це метод, який не має тіла реалізації при оголошенні.

Ви можете створити абстрактний клас, вказавши ключове слово abstract перед ключовим словом class.

abstract class AbstractClass {

void run() {

System.out.println("ran");

}

}

abstract class AbstractClass {

abstract void run();

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

37 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

Абстрактний клас може бути розширений іншими класами. Іншими словами, він також може бути підкласом.

abstract class AbstractClass {

void run() {

System.out.println("ran");

}

}

class ExtendingAbstractClass extends AbstractClass {

void newMethod() {

System.out.println("new");

}

@Override

void run() {

System.out.println("override");

}

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

38 of 61

Приклад

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

Розглянемо автомобіль, який має деякі функції, такі як старт, зупинка, хід заднім ходом тощо. Ці функції є загальними для всіх типів автомобілів.

Але як щодо функцій автоматизації, таких як автономне керування?

Реалізація цих функцій може відрізнятися для різних типів автомобілів. Давайте подивимося, як ви можете створити пов’язану з ним об’єктно-орієнтовану програму.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

39 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

abstract class Car {

void start() {

// implementation

System.out.println("runs car");

}

void stop() {

// implementation

System.out.println("engine stops");

}

void reverse() {

// implementation

System.out.println("reverse mode enabled");

}

abstract void selfDrive();

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

40 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

class CarTypeA extends Car {

@Override

void start() {

super.start();

}

@Override

void stop() {

super.stop();

}

@Override

void reverse() {

super.reverse();

}

void selfDrive() {

// custom implementation

System.out.println("Type A self

driving mode enabled");}}

class CarTypeB extends Car {

// ...all similar methods

void selfDrive() {

System.out.println("Type B self driving mode enabled");

}

}

class Main{

public static void main (String …args){

Car a = new CarTypeA();

Car b = new CarTypeB();

a.selfDrive();

b.selfDrive();

}

}

Результат:

Type A self driving mode enabled

Type B self driving mode enabled

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

41 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

Клас, який унаслідується від абастрактного класу має обов’язково здійснювати реалізацію всіх його абстрактних методів, інаше такий клас має бути теж абстрактним.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

42 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

43 of 61

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

44 of 61

Абстрактний клас. ВИСНОВКИ

СТАНОМ НА 01.02.2023

Абстрактні класи та методи

  • якщо клас який містить в своїй назві ключове слово "abstract" то він називається абстрактним класом.
  • абстрактні класи можуть містити, а можуть і не містити абстрактні методи, тобто методи без тіла(public void get();)
  • якщо клас має принаймні один абстрактний метод, то клас мусить бути оголошений абстрактним.
  • неможна створити об'єкт класу, якщо він оголошений абстрактним.
  • щоб скористатись функціоналом абстрактного класу, ви повинні унаслідуватись від нього, і забезпечити реалізацію абстрактних методів в дочірньому класі (ви повинні реалізувати всі методи які помічені як абстрактні, інакше ваш дочірній клас також буде абстрактним)

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

45 of 61

Інтерфейси

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

46 of 61

Сухарик

СТАНОМ НА 01.02.2023

Інтерфейси

Інтерфейси в програмуванні - це інструмент абстрагування членів класу (здебільшого методів) від їх реалізації.

Це спосіб повідомити класу, які методи повинні бути реалізовані ним.

Method_3

Method_1

Method_2

Method_4

GUI

Інтерфейс програмного коду

Графічний інтерфейс користувача

як має виглядати клас

як виглядає робоче вікно програми

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

47 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Подібно до абстрактних класів, ми не можемо створювати екземпляри або об’єкти інтерфейсу. Його можна вважати повністю абстрактним класом, оскільки він містить лише абстрактні методи, тобто методи без тіла реалізації.

Ви можете створити інтерфейс за допомогою ключового слова interface.

interface Car {

void start();

void stop();

void move();

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

48 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

У Java інтерфейси являють собою тип посилання, який схожий на клас. Однак, інтерфейс може містити:

  • тільки незмінні поля
  • оголошення методів (абстрактних методів) та вкладених типів
  • з Java 8 — методи з реалізацією (статичні та за замовчуванням).

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

49 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Реалізуйте інтерфейс, використовуючи ключове слово implements під час визначення класу.

class CarTypeB implements Car {

public void start() {

System.out.println("started");

}

public void stop() {

System.out.println("stopped");

}

public void move() {

System.out.println("running");

}

}

class Main {

public static void main (String … args){

Car a = new CarTypeB();

a.sart();

a.stop();

a.move();

}

}

Результат:

started

stopped

running

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

50 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Інтерфейси

1

Інтерфейси вказують, що саме має виконувати клас, проте не вказують як саме він це має робити (задають його інтерфейс).

  • Інтерфейси не містять змінних екземплярів класів;
  • Оголошені методи не містять тіла (як правило).

2

3

Якщо клас реалізує (імплементує) інтерфейс, він розширює (реалізує) логіку методів, які оголошенні в інтерфейсі.

Для повної реалізації інтерфейсу в класі має відтворюватись повний набір методів, які оголошено в інтерфейсі.

4

5

Кожен клас може враховувати свої особливості та розширювати реалізацію одного і того ж інтерфейсу.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

51 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

реалізація у класі методів, які оголошенні в інтерфейсі, має здійснюватися із модифікатором доступу public

тип даних методу, що реалізується у класі, має корелювати з типом даних методу оголошеного у інтерфейсі

назва методу та список параметрів, що реалізується в класі, має корелювати з методом оголошеним у інтерфейсі

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

52 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Імплементація в одному класі декількох інтерфейсів

public interface Callback {

void callback (int р);

}

 

public interface Callback_two {

void callback_two ();

}

 

public class Client implements Callback, Callback_two {

public void callback(int р) {

System.out.println("Метод викликається із значенням " + р);

}

public void callback_two() {

System.out.println("В одному класі можуть бути реалізовані методи з двох інтерфейсів");

}

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

53 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Абстрактний клас не імплементує вимоги інтерфейсу

(або імплементує не усі вимоги):

public interface Callback {

void callback (int р);

}

 

abstract class Іncomplete implements Callback {

int a, b;

 

void show() {

System.out.println(a + " " + b);

}

}

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

54 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Методи за замовчуванням в інтерфейсах:

1

2

3

Методи містять реалізацію певної логіки (вони не пусті)

В класах, що імплементують інтерфейси, методи за замовчуванням можна

викликати на виконання, або реалізовувати їх перевизначення.

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

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

55 of 61

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

СТАНОМ НА 01.02.2023

Інтерфейси

Методи за замовчуванням: приклад

public interface InterfaceMethod {

  int getNumber();

// оголошення методу за замовчування

default String getString() {

return "Виконання методу за замовчуванням";

}

}

public class MyInterface implements InterfacefMethod {

 

public int getNumber () {

return 1000;

}

}

public class DefaultMethodMain {

public static void main(String[] args) {

MyInterface mif = new MyInterface();

System.out.println(mif.getNumber());

System.out.println(mif.getString());

}

}

Результат:

1000

Виконання методу за замовчуванням

56 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Оскільки інтерфейси в Java - це механізм, який реалізує множинне спадкування (клас розширює кілька інтерфейсів), то може виникнути ромбоподібна проблема. І тут клас реалізує два і більше інтерфейси, які мають методи за замовчуванням з однаковою сигнатурою. В результаті компілятор не може вирішити, який метод інтерфейсу використовувати при зверненні до нього через об'єкт класу.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

57 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

ПРОБЛЕМА!!!: в області класу є два методи з однаковою сигнатурою, навіть незважаючи на те, що вони мають однакову реалізацію. Компілятор не перевіряє код на збіги.

РІШЕННЯ:

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

58 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Статичні методи в інтерфейсах

  • відзначаються ключовим словом static і повинні мати реалізацію

  • не успадковуються класами, що реалізують інтерфейс, а також іншими інтерфейсами, тому що належать до самого інтерфейсу

  • не можуть бути перевизначеними у класі, що реалізує інтерфейс

  • подібні до статичних методів класу і викликаються через ім'я інтерфейсу

  • зазвичай використовуються іншими методами інтерфейсу як допоміжні, наприклад, для перевірки на null.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

59 of 61

СТАНОМ НА 01.02.2023

Інтерфейси

Переваги та випадки використання інтерфейсів:

  • Гнучкість: Інтерфейси дозволяють класам реалізовувати кілька інтерфейсів, що дає змогу створювати класи з різною поведінкою, яку можна використовувати в різних контекстах.

  • Контракти: Інтерфейси забезпечують чіткий контракт для реалізації поведінки, що важливо в проектуванні великих систем.

  • Поліморфізм: За допомогою інтерфейсів можна досягти поліморфізму – об'єкт класу, що реалізує інтерфейс, може бути використаний як об'єкт типу інтерфейсу.

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

60 of 61

СТАНОМ НА 01.02.2023

ПОРІВНЯННЯ АБСТРАКТНИХ КЛАСІВ ТА ІНТЕРФЕЙСІВ

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

61 of 61

61

Q&A SESSION