Рекомендуємо, 2024

Вибір Редакції

Різниця між успадкуванням і поліморфізмом

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

Діаграма порівняння

Основа для порівнянняУспадкуванняПоліморфізм
ОсновнийУспадкування створює новий клас, використовуючи властивості вже існуючого класу.Поліморфізм є в основному загальним інтерфейсом для множинної форми.
РеалізаціяУспадкування в основному реалізується на класах.Поліморфізм в основному реалізується на функції / методи.
ВикористовуйтеПідтримати концепцію повторного використання в ООП і зменшити довжину коду.Дозволяє об'єкту вирішити, яку форму функції буде викликати, коли, під час компіляції (перевантаження), а також час виконання (перевизначення).
ФормиУспадкування може бути одне успадкування, множинне успадкування, багаторівневе успадкування, ієрархічне успадкування та гібридне успадкування.Поліморфізм може представляти собою поліморфізм часу компіляції (перевантаження) або поліморфізм часу виконання (перевизначення).
ПрикладКлас 'table' може успадковувати особливість класу 'меблі', оскільки 'таблиця' є 'меблями'.Клас 'study_table' може також мати функцію 'set_color ()', а клас 'Dining_table' також може мати функцію 'set_color ()', отже, яку форму для виклику функції set_color () можна вирішити одночасно, час компіляції та час виконання.

Визначення наслідування:

Успадкування є однією з найважливіших характеристик ООП, яка рішуче підтримує «повторне використання». Повторне використання може бути описано як створення нового класу шляхом повторного використання властивостей існуючого класу. У спадщині існує базовий клас, який успадковується похідним класом. Коли клас успадковує будь-який інший клас, член (и) базового класу стають членом (ами) похідного класу.

Загальна форма успадкування класу є наступною:

 class-derivat-name-ім'я: access-специфікатор base-class-name {// тіло класу}; 

Тут специфікатор доступу забезпечує режим доступу (приватний, загальнодоступний, захищений) до членів (ів) базового класу для похідного класу. Якщо специфікатор доступу не присутній, за замовчуванням він вважається "приватним". У C ++, якщо похідний клас є "struct", то специфікатор доступу є "відкритим" за замовчуванням.

У C ++ успадкування можна досягти у п'яти формах. Вони можуть бути класифіковані як: -

  • Одиничне успадкування (лише один суперклас)
  • Багаторазове успадкування (кілька суперкласів)
  • Ієрархічне успадкування (один суперклас, багато підкласів)
  • Множинне успадкування (отримане з похідного класу)

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

 class-имя-класу extends base-class-name {// тіло класу}; 

Java не підтримує успадкування багаторазового успадкування, тоді як вона підтримує багаторівневу ієрархію. В Java іноді супер клас може заховати приховати деталі реалізації, і це робить частину цих даних “приватною”. Як і в Java, підклас не може отримати доступ до приватних членів суперкласу, і якщо підклас хоче отримати доступ або ініціалізувати цих членів, то Java надає рішення. Підклас може посилатися на членів свого безпосереднього суперкласу за допомогою ключового слова "супер". Пам'ятайте, що ви можете отримати доступ лише до членів безпосереднього суперкласу.

"Супер" має дві загальні форми. Перший - це виклик конструктора суперкласу. Другий - доступ до члена суперкласу, який був прихований членом підкласу.

 // Перша форма виклику конструктора. клас supper_class {supper_class (argument_list) {..} // конструктор суперкласу}; class sub_class розширює supper_class {sub_class (argument_list) {..} // конструктор sub_class super (argument_list); // sub_class викликає конструктор суперкласу}}; 
 // другий для 'super' класу supper_class {int i; } class sub_class розширює supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' супер-класу i = b; // 'i' підкласу}}; 

Визначення поліморфізму

Термін поліморфізм просто означає «одна функція, множинні форми». Поліморфізм досягається як під час компіляції, так і під час виконання. Поліморфізм часу компіляції досягається за допомогою «перевантаження», тоді як поліморфізм часу виконання досягається за допомогою «перевизначення».

Поліморфізм дозволяє об'єкту вирішити «яка форма функції, яку слід викликати, коли» в обох, час компіляції і час виконання.
Давайте обговоримо першу концепцію перевантаження. У перевантаженні ми визначаємо функцію в класі більше одного разу з різним типом даних і числом параметрів, тоді як функція, яка буде перевантажена, повинна мати той же тип повернення. Більшість разів функції перевантажених є конструкторами класу.

 клас перевантаження {int a, b; public: int перевантаження (int x) {// перший конструктор перевантаження () a = x; return a; } int перевантаження (int x, int y) {// другий конструктор перевантаження () a = x; b = y; return a * b; }}; int main () {перевантаження O1; O1.завантаження (20); // перший виклик конструктора overload () O1.overload (20, 40); // другий виклик конструктора перевантаження () 

Тепер розглянемо другу форму поліморфізму, тобто перевизначення. Поняття перевизначення може бути реалізовано лише до функції класів, які також реалізують концепцію спадкування. У C ++ функції, що підлягає перевизначенню, передує ключовому слову "віртуальний" у базовому класі і перевизначено у похідному класі з тим же прототипом, за винятком ключового слова "віртуальний".

 class base {public: virtual void funct () {// віртуальна функція базового класу cout << "Це функція базового класу ()"; }}; клас izved1: public base {public: void funct () {// віртуальна функція базового класу, перевизначена в класі deriv1 class 

Основні відмінності між успадкуванням і поліморфізмом

  1. Успадкування створює клас, який отримує свою функцію з вже існуючого класу. З іншого боку, поліморфізм є інтерфейсом, який може бути визначений у декількох формах.
  2. Успадкування реалізується на класах, тоді як поліморфізм реалізується на методах / функціях.
  3. Оскільки успадкування дозволяє похідному класу використовувати елементи і методи, визначені в базовому класі, похідний клас не потребує повторного визначення цих елементів або методу, тому можна сказати, що він збільшує можливість повторного використання коду і, отже, зменшує довжину коду . З іншого боку, поліморфізм дозволяє об'єкту вирішити, яку форму методу він хоче викликати як під час компіляції, так і під час виконання.
  4. Успадкування можна класифікувати як єдине успадкування, множинне успадкування, багаторівневе успадкування, ієрархічне успадкування та гібридне успадкування. З іншого боку, поліморфізм класифікується як перевантаження і перевизначення.

Висновок:

Успадкування і поліморфізм є взаємопов'язаними поняттями, оскільки динамічний поліморфізм відноситься до класів, які також реалізують концепцію успадкування.

Top