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

Выбор редакции

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

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

Сравнительная таблица

Основа для сравнениянаследованиеПолиморфизм
основнойНаследование - это создание нового класса с использованием свойств уже существующего класса.Полиморфизм в основном общий интерфейс для множественной формы.
РеализацияНаследование в основном реализовано на классах.Полиморфизм в основном реализован на функции / методы.
использованиеПоддерживать концепцию повторного использования в ООП и сокращать длину кода.Позволяет объекту решать, какую форму функции вызывать во время компиляции (перегрузка), а также во время выполнения (переопределение).
формыНаследование может быть одним наследованием, множественным наследованием, многоуровневым наследованием, иерархическим наследованием и гибридным наследованием.Полиморфизм может быть полиморфизмом времени компиляции (перегрузка) или полиморфизмом времени исполнения (переопределение).
примерКласс «таблица» может наследовать функцию класса «мебель», так как «таблица» - это «мебель».Класс 'study_table' также может иметь функцию 'set_color ()', а класс 'Dining_table' также может иметь функцию 'set_color ()', поэтому, какую форму вызываемой функции set_color () можно выбрать одновременно, во время компиляции и время выполнения.

Определение наследования:

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

Общая форма наследования класса выглядит следующим образом:

 class производное-имя-класса: спецификатор доступа base-class-name {// тело класса}; 

Здесь спецификатор доступа обеспечивает режим доступа (частный, публичный, защищенный) к члену (ам) в базовом классе к производному классу. Если спецификатор доступа отсутствует, по умолчанию он считается «закрытым». В C ++, если производный класс «struct», то по умолчанию указатель доступа «public».

В C ++ наследование может быть достигнуто в пяти формах. Их можно классифицировать как:

  • Одиночное наследство (только один супер класс)
  • Множественное наследование (несколько суперклассов)
  • Иерархическое наследование (один суперкласс, много подклассов)
  • Множественное наследование (производное от производного класса)

В Java класс наследует другой класс, используя ключевое слово «extends». В Java базовый класс называется суперклассом, а производный класс называется подклассом. Подкласс не может получить доступ к тем членам базового класса, которые объявлены как «частные». Общая форма наследования класса в Java следующая.

 класс производное-имя-класса расширяет имя-базового класса {// тело класса}; 

Java не поддерживает наследование множественного наследования, тогда как поддерживает многоуровневую иерархию. В Java иногда суперкласс может захотеть скрыть детали своей реализации, и некоторая часть этих данных становится «закрытой». Как и в Java, подкласс не может получить доступ к закрытым членам суперкласса, и если подкласс хочет получить доступ или инициализировать эти члены, то Java предоставляет решение. Подкласс может ссылаться на членов своего непосредственного суперкласса, используя ключевое слово «super». Помните, что вы можете получить доступ только к членам непосредственного суперкласса.

«Супер» имеет две основные формы. Во-первых, он используется для вызова конструктора суперкласса. Второе - это доступ к члену суперкласса, который был скрыт членом подкласса.

 // первая форма вызова конструктора. class supper_class {supper_class (arguments_list) {..} // конструктор суперкласса}; класс sub_class extends supper_class {sub_class (arguments_list) {..} // конструктор sub_class super (arguments_list); // sub_class вызывает конструктор суперкласса}}; 
 // второй для класса 'super' supper_class {int i; } класс sub_class extends supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' суперкласса i = b; // 'i' подкласса}}; 

Определение полиморфизма

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

Полиморфизм позволяет объекту решать «какую форму функции вызывать, когда» как во время компиляции, так и во время выполнения.
Давайте обсудим первую концепцию перегрузки. При перегрузке мы определяем функцию в классе более одного раза с другим типом данных и количеством параметров, тогда как перегружаемая функция должна иметь один и тот же тип возврата. В большинстве случаев перегруженные функции являются конструкторами класса.

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

Теперь давайте обсудим вторую форму полиморфизма - переопределение. Концепция переопределения может быть реализована только в функции классов, которые также реализуют концепцию наследования. В C ++ переопределяемой функции предшествует ключевое слово «virtual» в базовом классе и переопределено в производном классе с тем же прототипом, за исключением ключевого слова «virtual».

 class base {public: virtual void funct () {// виртуальная функция базового класса cout << "Это funct () базового класса"; }}; класс производный1: публичная база {public: void funct () {// виртуальная функция базового класса, переопределенная в производном классе cout 

Ключевые различия между наследованием и полиморфизмом

  1. Наследование - это создание класса, который получает свою особенность от уже существующего класса. С другой стороны, полиморфизм - это интерфейс, который может быть определен в нескольких формах.
  2. Наследование реализовано в классах, тогда как полиморфизм реализован в методах / функциях.
  3. Так как наследование позволяет производному классу использовать элементы и методы, определенные в базовом классе, производному классу не нужно определять эти элементы или метод снова, поэтому мы можем сказать, что это увеличивает возможность повторного использования кода и, следовательно, уменьшает длину кода, С другой стороны, полиморфизм позволяет объекту решать, какую форму метода он хочет вызвать как во время компиляции, так и во время выполнения.
  4. Наследование может быть классифицировано как одиночное наследование, множественное наследование, многоуровневое наследование, иерархическое наследование и гибридное наследование. С другой стороны, полиморфизм классифицируется как перегрузка и переопределение.

Заключение:

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

Top