1
ЛЕКЦІЯ №9.
Парадигми об’єктно-орієнтованого програмування. Наслідування та абстракція
Викладач: PhD, Юлія Назар
Програмування на java
2
Парадигми ООП
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
Принципи ООП
Поліморфізм
Інкапсуляція
Наслідування
Абстракція
3
agenda
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
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
СТАНОМ НА 01.02.2023
Наслідування
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Наслідування — це властивість, що дозволяє створити новий клас на основі існуючого з частковим або повним запозиченням характеристик. Це дозволяє впорядкувати класи в ієрархії, яка представляє відносини типу "is-a" (є типом/є різновидом). Наприклад, "Автомобіль" є різновидом "Транспортного засобу".
Наслідування - це механізм у програмуванні, у тому числі і в Java, який дозволяє описати новий клас на основі вже існуючого. Клас-спадкоємець при цьому отримує доступ до полів та методів батьківського класу.
СТАНОМ НА 01.02.2023
Наслідування
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
ПРИКЛАД:
Що не є наслідуванням?
СТАНОМ НА 01.02.2023
Наслідування
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
назва_дочірнього_класу extends назва_батьківського_класу {
...
}
Як унаслідуватись?
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Наслідування
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
У мові Java відсутнє множинне успадкування: не можна успадкувати клас від двох класів. У кожного класу може бути лише один батьківський клас. Якщо батьківський клас не вказано, ним вважається клас Object.
СТАНОМ НА 01.02.2023
Наслідування
Існує два типи спадкування, які визначаються кількістю батьківських класів - одиночне і множинне.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Права доступу:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Можливості підкласів:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Можливості підкласів:
Ключове слово super
Ключове слово super – це зумовлене посилання на об'єкт суперкласу в тілі підкласу. Це ключове слово можна використовувати в конструкторах підкласу для явного звернення до конструкторів суперкласу. Основне призначення – ініціалізація закритих полів суперкласу.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Під час створення об'єкта підкласу завжди викликаються конструктори всіх його суперкласів. Наприклад, клас С успадковується від класу B, а клас В – від класу А; тоді класи А та В є суперкласами для класу С.
Такі виклики називаються ланцюжками конструкторів. Це логічно, тому що підклас спільно використовує всі властивості, описані у його суперкласах. Отже, створюючи об'єкт підкласу, потрібно ініціалізувати всі характеристики. Як ви знаєте, для цього призначено конструктори класів.
Правила виклику ланцюжків конструкторів:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Наслідування
Приховування/затінення полів
Якщо поле підкласу має те саме ім'я, що й успадковане поле суперкласу, воно приховує/затінює область видимості поля суперкласу, навіть якщо їх типи різняться.
Для звернення до поля суперкласу у підкласі використовується ключове слово super. Це друга форма застосування ключового слова super як посилання на об'єкт суперкласу в тілі підкласу. Вона має наступний синтаксис:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Приклад:
Рез.: 230
300
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Перевизначення методів
Спадкування та перевизначення методів використовуються для реалізації відмінностей у поведінці суперкласу та підкласу. При спадкуванні класи додають нові поля та методи, чи перевизначають успадковані методи.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
Приклади:
Рез.: Base
Derived
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Наслідування
Приклади:
Рез.: Помилка компіляції
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Наслідування
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
Клас Object
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Клас Object
Приклад:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 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
Абстракція: абстрактні класи та інтерфейси
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
Сухарик
СТАНОМ НА 01.02.2023
Абстракція: абстрактні класи та інтерфейси
Абстракція в об’єктно-орієнтованому програмуванні означає приховування деталей реалізації від кінцевих користувачів. В абстракції ви можете знати, які функціональні можливості системи, але ви не можете знати, як вони були реалізовані.
В Java для абстракції використовують абстрактні класи та інтерфейси.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Абстракція: абстрактні класи та інтерфейси
Отже, абстракція в ООП:
І як наслідок –зниження складності програми.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
Приклад
СТАНОМ НА 01.02.2023
Абстрактні класи та методи
Розглянемо автомобіль, який має деякі функції, такі як старт, зупинка, хід заднім ходом тощо. Ці функції є загальними для всіх типів автомобілів.
Але як щодо функцій автоматизації, таких як автономне керування?
Реалізація цих функцій може відрізнятися для різних типів автомобілів. Давайте подивимося, як ви можете створити пов’язану з ним об’єктно-орієнтовану програму.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Абстрактні класи та методи
Клас, який унаслідується від абастрактного класу має обов’язково здійснювати реалізацію всіх його абстрактних методів, інаше такий клас має бути теж абстрактним.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Абстрактні класи та методи
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Абстрактні класи та методи
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
Абстрактний клас. ВИСНОВКИ
СТАНОМ НА 01.02.2023
Абстрактні класи та методи
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
Інтерфейси
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
Сухарик
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Інтерфейси
У Java інтерфейси являють собою тип посилання, який схожий на клас. Однак, інтерфейс може містити:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Інтерфейси
реалізація у класі методів, які оголошенні в інтерфейсі, має здійснюватися із модифікатором доступу public
тип даних методу, що реалізується у класі, має корелювати з типом даних методу оголошеного у інтерфейсі
назва методу та список параметрів, що реалізується в класі, має корелювати з методом оголошеним у інтерфейсі
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Інтерфейси
Методи за замовчуванням в інтерфейсах:
1
2
3
Методи містять реалізацію певної логіки (вони не пусті)
В класах, що імплементують інтерфейси, методи за замовчуванням можна
викликати на виконання, або реалізовувати їх перевизначення.
Методи за замовчуванням не потребують обов’язкової реалізації в класі, що імплементує інтерфейс (ці методи вже реалізовані в самому інтерфейсі)
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
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
Виконання методу за замовчуванням
СТАНОМ НА 01.02.2023
Інтерфейси
Оскільки інтерфейси в Java - це механізм, який реалізує множинне спадкування (клас розширює кілька інтерфейсів), то може виникнути ромбоподібна проблема. І тут клас реалізує два і більше інтерфейси, які мають методи за замовчуванням з однаковою сигнатурою. В результаті компілятор не може вирішити, який метод інтерфейсу використовувати при зверненні до нього через об'єкт класу.
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Інтерфейси
ПРОБЛЕМА!!!: в області класу є два методи з однаковою сигнатурою, навіть незважаючи на те, що вони мають однакову реалізацію. Компілятор не перевіряє код на збіги.
РІШЕННЯ:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Інтерфейси
Статичні методи в інтерфейсах
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
Інтерфейси
Переваги та випадки використання інтерфейсів:
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
СТАНОМ НА 01.02.2023
ПОРІВНЯННЯ АБСТРАКТНИХ КЛАСІВ ТА ІНТЕРФЕЙСІВ
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
61
Q&A SESSION