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

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 10 Травень 2024
Anonim
ООП. Java vs JavaScript. Part 1. Ответ на 3-й вопрос
Відеоролик: ООП. Java vs JavaScript. Part 1. Ответ на 3-й вопрос

Зміст


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

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

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


Визначення спадкування:

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

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

class-class-name: ідентифікатор доступу base-class-name {// тіло класу};

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

У С ++ успадкування може бути досягнуто у п’яти формах. Їх можна класифікувати як: -


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

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

клас-похідне-клас-ім'я розширює базовий клас-ім'я {// тіло класу};

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

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

// перша форма виклику конструктора. клас supper_class {supper_class (argument_list) {..} // конструктор суперкласу}; клас sub_class розширює supper_class {sub_class (argument_list) {..} // конструктор sub_class super (argument_list); // sub_class викликає конструктор суперкласу}};

// другий для суперкласу supper_class {int i; } клас sub_class розширює supper_class {int i; під_клас (int a, int b) {super.i = a; // i суперкласу i = b; // i підкласу}};

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

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

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

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

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

class base {public: virtual void funct () {// віртуальна функція базового класу cout << "Це функція базових класів ()"; }}; клас похідний1: публічна база {public: void funct () {// віртуальна функція базового класу, переглянута у похідне1 клас cout << "Це похідний1 клас funct ()"; }}; int main () {база * p, b; похідне1 d1; * p = & b; p-> funct (); // виклик до базового класу funct (). * p = & d1; повернути 0; }

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

Висновок:

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