Recomendado, 2024

Escolha Do Editor

Diferença entre herança e polimorfismo

Herança permite, reutilização de código e o polimorfismo é, a ocorrência de uma função com forma diferente. A diferença básica entre herança e polimorfismo é que a herança permite que o código já existente seja reutilizado novamente em um programa, e o polimorfismo fornece um mecanismo para decidir dinamicamente qual forma de uma função a ser invocada.

Gráfico de comparação

Base para ComparaçãoHerançaPolimorfismo
BasicA herança está criando uma nova classe usando as propriedades da classe já existente.O polimorfismo é basicamente uma interface comum para múltiplas formas.
ImplementaçãoA herança é basicamente implementada nas classes.O polimorfismo é basicamente implementado em funções / métodos.
UsarPara suportar o conceito de reusabilidade em OOP e reduz o comprimento do código.Permite que o objeto decida qual formulário da função será invocado quando, em tempo de compilação (sobrecarga), bem como tempo de execução (sobrescrevendo).
FormuláriosA herança pode ser uma única herança, herança múltipla, herança de vários níveis, herança hierárquica e herança híbrida.O polimorfismo pode ser um polimorfismo em tempo de compilação (sobrecarga) ou polimorfismo em tempo de execução (sobrescrevendo).
ExemploA classe 'table' pode herdar o recurso da classe 'furniture', já que 'table' é 'furniture'.A classe 'study_table' também pode ter a função 'set_color ()' e uma classe 'Dining_table' também pode ter a função 'set_color ()' então, qual forma da função set_color () invocar pode ser decidida em ambos, tempo de compilação e tempo de execução.

Definição de Herança:

A herança é uma das características cruciais da POO, que apoia fortemente a “reutilização”. Reusabilidade poderia ser descrita como criar uma nova classe reutilizando as propriedades da classe existente. Na herança, existe uma classe base, que é herdada pela classe derivada. Quando uma classe herda qualquer outra classe, o (s) membro (s) da classe base se torna o (s) membro (s) de uma classe derivada.

A forma geral de herdar uma classe é a seguinte:

 class derived-class-name: especificador de acesso base-class-name {// corpo da classe}; 

Aqui, o especificador de acesso fornece o modo de acesso (privado, público, protegido) ao (s) membro (s) na classe base para a classe derivada. Se nenhum especificador de acesso estiver presente, por padrão, ele é considerado como "privado". Em C ++, se a classe derivada for "struct", o especificador de acesso será "public" por padrão.

Em C ++, a herança pode ser obtida em cinco formas. Eles podem ser classificados como: -

  • Herança Única (apenas uma superclasse)
  • Herança Múltipla (várias superclasses)
  • Herança Hierárquica (uma superclasse, muitas subclasses)
  • Herança Múltipla (derivada de uma classe derivada)

Em Java, a classe herda a outra classe usando a palavra-chave “extends”. Em Java, a classe base é referida como uma superclasse e a classe derivada é referida como uma subclasse. Uma subclasse não pode acessar os membros da classe base, que são declarados como "privados". A forma geral que herda a classe em Java é a seguinte.

 class derived-class-name extends base-class-name {// corpo da classe}; 

Java não suporta a herança de herança múltipla, enquanto suporta a hierarquia multinível. Em Java, às vezes, uma superclasse pode querer ocultar seus detalhes de implementação e faz com que uma parte desses dados seja “privada”. Como em Java, uma subclasse não pode acessar os membros privados da superclasse e, se uma subclasse desejar acessar ou inicializar esses membros, o Java fornecerá uma solução. A subclasse pode referir os membros de sua superclasse imediata usando uma palavra-chave "super". Lembre-se, você só pode acessar os membros da superclasse imediata.

O 'super' tem duas formas gerais. A primeira é, use para chamar o construtor de superclasse. A segunda é, para acessar o membro da superclasse que foi ocultado pelo membro da subclasse.

 // primeira forma de chamar o construtor. classe supper_class {supper_class (argument_list) {..} // construtor da super class}; class sub_class extends supper_class {sub_class (argument_list) {..} // construtor de sub_class super (argument_list); // sub_class chama o construtor de super class}}; 
 // segundo para 'super' classe supper_class {int i; } classe sub_class estende supper_class {int i; sub_class (int a, int b) {super.i = a; // 'i' da superclasse i = b; // 'i' da subclasse}}; 

Definição de Polimorfismo

O termo polimorfismo significa simplesmente "uma função, formas múltiplas". O polimorfismo é obtido no tempo de compilação e no tempo de execução. O polimorfismo no tempo de compilação é obtido através de “sobrecarga”, enquanto o polimorfismo no tempo de execução é obtido através de “overriding”.

O polimorfismo permite que o objeto decida "qual forma da função deve ser invocada quando" em ambos, tempo de compilação e tempo de execução.
Vamos discutir o primeiro conceito de sobrecarga. Na sobrecarga, definimos uma função na classe mais de uma vez com diferentes tipos de dados e o número de parâmetros, enquanto a função a ser sobrecarregada deve ter o mesmo tipo de retorno. Na maioria das vezes as funções para o sobrecarregado são construtores da classe.

 sobrecarga de classe {int a, b; public: int sobrecarga (int x) {// primeiro sobrecarga () construtor a = x; return a; } sobrecarga int (int x, int y) {// sobrecarga segundo () construtor a = x; b = y; return a * b; }}; int main () {sobrecarga O1; O1.overload (20); // first overload () chamada do construtor O1.overload (20, 40); // second overload () constructor call} 

Agora, vamos discutir a segunda forma de polimorfismo, ou seja, substituindo. O conceito de sobrescrever só pode ser implementado para a função das classes que também implementam o conceito de herança. Em C ++, a função a ser substituída é precedida pela palavra-chave “virtual” na classe base e redefinida na classe derivada com o mesmo protótipo, exceto a palavra-chave “virtual”.

 base de classe {public: virtual void funct () {// função virtual da classe base cout << "Esta é uma função da classe base ()"; }}; classe derivada1: base pública {public: void funct () {// função virtual da classe base redefinida na classe derivada cout 

Principais diferenças entre herança e polimorfismo

  1. A herança está criando uma classe que deriva seu recurso de uma classe já existente. Por outro lado, o polimorfismo é uma interface que pode ser definida em múltiplas formas.
  2. A herança é implementada nas classes, enquanto o polimorfismo é implementado em métodos / funções.
  3. Como a herança permite que uma classe derivada use os elementos e métodos definidos na classe base, a classe derivada não precisa definir esses elementos ou o método novamente, portanto, podemos dizer que aumenta a reutilização do código e, portanto, reduz o comprimento do código . Por outro lado, o polimorfismo possibilita que um objeto decida qual a forma do método que deseja invocar tanto no tempo de compilação quanto no tempo de execução.
  4. A herança pode ser classificada como herança única, herança múltipla, herança multinível, herança hierárquica e herança híbrida. Por outro lado, o polimorfismo é classificado como sobrecarregado e prioritário.

Conclusão:

A herança e o polimorfismo são conceitos inter-relacionados, pois o polimorfismo dinâmico se aplica às classes que também implementam o conceito de herança.

Top