Diferença entre herança e polimorfismo

Autor: Laura McKinney
Data De Criação: 1 Abril 2021
Data De Atualização: 11 Poderia 2024
Anonim
Diferença entre herança e polimorfismo - Tecnologia
Diferença entre herança e polimorfismo - Tecnologia

Contente


A herança permite, a reutilização do 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 a forma de uma função a ser invocada.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

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 em classes.O polimorfismo é basicamente implementado em função / métodos.
UsarApoiar o conceito de reutilização no OOP e reduzir o comprimento do código.Permite que o objeto decida qual forma da função será chamada quando, no tempo de compilação (sobrecarga), bem como no tempo de execução (substituição).
FormuláriosA herança pode ser uma herança única, herança múltipla, herança multinível, 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 (substituição).
ExemploA tabela de classe pode herdar o recurso dos móveis de classe, pois uma mesa é um móvel.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 (), portanto, qual a forma da função set_color () a ser chamada pode ser decidida em ambos, tempo de compilação e tempo de execução.


Definição de herança:

A herança é um dos recursos cruciais do OOP, que apóia fortemente a "reutilização". A reutilização pode ser descrita como a criação de uma nova classe, reutilizando as propriedades da classe existente. Na herança, há uma classe base, que é herdada pela classe derivada. Quando uma classe herda qualquer outra classe, os membros da classe base se tornam os membros de uma classe derivada.

A forma geral de herdar uma classe é a seguinte:

classe nome-classe-derivado: especificador de acesso nome-classe-base {// corpo da classe};

Aqui, o especificador de acesso fornece o modo de acesso (privado, público, protegido) aos membros da classe base à classe derivada. Se nenhum especificador de acesso estiver presente, por padrão, ele será considerado "particular". No C ++, se a classe derivada for "struct", o especificador de acesso será "public" por padrão.


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

  • Herança única (apenas uma super classe)
  • Herança Múltipla (várias superclasses)
  • Herança Hierárquica (uma super classe, 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 "particulares". A forma geral que herda a classe em Java é a seguinte.

classe nome-classe-derivado estende o nome-classe-base {// corpo da classe};

Java não suporta a herança de múltiplas heranças, enquanto suporta hierarquia multinível. Em Java, algumas vezes uma superclasse pode querer ocultar seus detalhes de implementação e torna parte desses dados "privados". Como em Java, uma subclasse não pode acessar os membros privados da superclasse e se uma subclasse deseja acessar ou inicializar esses membros, o Java fornece uma solução. A subclasse pode consultar os membros de sua superclasse imediata usando a palavra-chave "super". Lembre-se, você só pode acessar os membros da superclasse imediata.

O 'super' tem duas formas gerais. O primeiro é que ele chama o construtor da superclasse. A segunda é acessar o membro da superclasse que foi oculto pelo membro da subclasse.

// primeira forma de chamar o construtor. classe supper_class {supper_class (argument_list) {..} // construtor da super classe}; classe sub_class estende supper_class {sub_class (argument_list) {..} // construtor da sub_class super (argument_list); // sub_class chama o construtor da super classe}};

// segundo da super classe supper_class {int i; } classe sub_class estende supper_class {int i; sub_classe (int a, int b) {super.i = a; // i da super classe i = b; // i da subclasse}};

Definição de Polimorfismo

O termo polimorfismo significa simplesmente 'uma função, múltiplas formas'. O polimorfismo é alcançado no tempo de compilação e no tempo de execução. O polimorfismo em tempo de compilação é alcançado através de "sobrecarga", enquanto que o polimorfismo em tempo de execução é alcançado através de "substituição".

O polimorfismo permite que o objeto decida “qual forma da função será chamada quando” em ambos, compilar o tempo e o 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 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 os sobrecarregados são construtores da classe.

sobrecarga de classe {int a, b; public: int overload (int x) {// primeiro construtor overload () a = x; retornar a; } int overload (int x, int y) {// segundo construtor overload () a = x; b = y; retornar a * b; }}; int main () {sobrecarga O1; Sobrecarga O1 (20); // primeiro construtor overload () chama O1.overload (20,40); // segunda chamada do construtor overload ()}

Agora, vamos discutir a segunda forma de polimorfismo, ou seja, substituir. O conceito de substituição só pode ser implementado para a função das classes que também implementam o conceito de herança. No 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”.

classe base {public: virtual void funct () {// função virtual da classe base cout << "Esta é uma classe base funct ()"; }}; classe derivada1: base pública {public: void funct () {// função virtual da classe base redefinida na classe derivada1 cout << "Esta é uma classe derivada1 funct ()"; }}; int main () {base * p, b; derivado d1; * p = & b; p-> funct (); // chama a classe base funct (). * p = & d1; retornar 0; }

  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 de várias formas.
  2. A herança é implementada nas classes, enquanto o polimorfismo é implementado nos 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 métodos novamente, portanto, podemos dizer que aumenta a reutilização do código e, portanto, reduz o tamanho do código . Por outro lado, o polimorfismo permite que um objeto decida qual a forma do método que ele deseja chamar no tempo de compilação e 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 sobrecarga e substituição.

Conclusão:

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