Herança em Java (com exemplo)

O que é herança?

Herança é um mecanismo no qual uma classe adquire a propriedade de outra classe. Por exemplo, uma criança herda as características de seus pais. Com herança, podemos reutilizar os campos e métodos da classe existente. Conseqüentemente, a herança facilita a reutilização e é um conceito importante de OOPs.

O que é herança em Java?

Java Herança é um mecanismo no qual uma classe adquire a propriedade de outra classe. Em Java, quando existe um relacionamento “É-A” entre duas classes, usamos Herança. A classe pai é chamada de superclasse e a classe herdada é chamada de subclasse. A palavra-chave extends é usado pela subclasse para herdar os recursos da superclasse. Herança é importante, pois leva à reutilização do código.

Java Sintaxe de herança:

class subClass extends superClass  
{  
   //methods and fields  
} 

Tipos de herança em Java

Aqui estão os diferentes tipos de herança em Java:

  1. Herança Única
  2. Herança múltipla
  3. Herança multinível
  4. Herança Hierárquica
  5. Herança Híbrida

1. Herança Única:

Na herança única, uma classe estende outra classe (apenas uma classe).

Herança única em Java
Herança Única

No diagrama acima, a Classe B estende apenas a Classe A. A Classe A é uma superclasse e a Classe B é uma Subclasse.

2. Herança múltipla:

Herança Múltipla é uma das heranças em Java tipos onde uma classe estende mais de uma classe. Java não suporta herança múltipla.

Herança Múltipla em Java
Java Herança múltipla

Conforme o diagrama acima, a Classe C estende a Classe A e a Classe B.

3. Herança multinível:

Na herança multinível, uma classe pode herdar de uma classe derivada. Conseqüentemente, a classe derivada se torna a classe base para a nova classe.

Herança multinível em Java
Herança multinível

Conforme mostrado no diagrama, a Classe C é uma subclasse de B e B é uma da subclasse Classe A.

4. Herança Hierárquica:

Na herança hierárquica, uma classe é herdada por muitas subclasses.


Herança Hierárquica em Java
Herança Hierárquica

Conforme o exemplo acima, as classes B, C e D herdam a mesma classe A.

5. Herança Híbrida:

Herança híbrida é um dos tipos de herança em Java que é uma combinação de herança única e múltipla.


Herança Híbrida
Herança Híbrida

Conforme o exemplo acima, todos os membros públicos e protegidos da Classe A são herdados na Classe D, primeiro através da Classe B e, em segundo lugar, através da Classe C.

Nota: Java não suporta herança híbrida/múltipla

Herança em Java Exemplo

Aqui está um exemplo de herança em Java:


Exemplo de Java Herança
Java Exemplo de herança

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

Superpalavra-chave

A palavra-chave super é semelhante à palavra-chave “this”. A palavra-chave super pode ser usada para acessar qualquer membro de dados ou métodos da classe pai. A palavra-chave super pode ser usada em variável, método e nível de construtor.

Sintaxe:

super.<method-name>();

Verifique também: - esta palavra-chave em Java: O que é e como usar com exemplo

Aprenda herança em POO com exemplo

Considere o mesmo aplicativo bancário do exemplo anterior.

Devemos abrir dois tipos de contas diferentes, uma para poupança e outra para corrente (também conhecida como corrente).

Herança em OOP

Vamos comparar e estudar como podemos abordar a codificação a partir de um perspectiva de programação estruturada e orientada a objetos.

abordagem estrutural: Na programação estruturada, criaremos duas funções –

  1. Um para retirar
  2. E o outro para ação de depósito.

Uma vez que o funcionamento dessas funções permanece o mesmo em todas as contas.

Herança em OOPs

Abordagem OOP: Ao usar o OOPs abordagem de programação. Criaríamos duas classes.

  • Cada um tendo implementação das funções de depósito e retirada.
  • Isso será um trabalho extra redundante.

Herança em OOPs

Solicitação de mudança no software

Agora há uma mudança na especificação de requisitos para algo que é tão comum na indústria de software. Você deve adicionar funcionalidade de conta bancária privilegiada com recurso de cheque especial. Como pano de fundo, o cheque especial é uma facilidade onde você pode sacar um valor superior ao saldo disponível em sua conta.

Solicitação de mudança no software

Abordagem estrutural: Usando uma abordagem funcional, tenho que modificar minha função de retirada, que já foi testada e definida como linha de base. E adicionar um método como o abaixo atenderá aos novos requisitos.

Solicitação de mudança no software

Abordagem OOP: Usando a abordagem OOP, você só precisa escrever uma nova classe com implementação exclusiva da função de retirada. Nunca tocamos no trecho de código testado.

Solicitação de mudança no software

Outra solicitação de mudança

E se o requisito mudar ainda mais? Gostaria de adicionar uma conta de cartão de crédito com sua própria exigência exclusiva de depósitos.

Solicitação de múltiplas alterações no requisito de software

Abordagem estrutural: Usando a abordagem estrutural, você deve alterar novamente o trecho testado do código de depósito.

Abordagem estrutural para múltiplas solicitações de mudança em software

Abordagem OOP: Mas usando a abordagem orientada a objetos, você apenas criará uma nova classe com sua implementação única do método deposit (destacado em vermelho na imagem abaixo). Então, embora a programação estrutural pareça uma abordagem fácil inicialmente, a POO vence a longo prazo.

Abordagem OOP para Solicitações de Mudança Múltipla

Vantagens da herança em OOPs

Mas pode-se argumentar que em todas as classes, você tem trechos de código repetidos.

Para superar isso, você cria uma classe pai, digamos “conta” e implementa a mesma função de depósito e retirada. E faz com que as classes filhas herdem a classe “conta”. Para que elas tenham acesso às funções de retirada e depósito na classe conta. As funções não precisam ser implementadas individualmente. Isto é Herança em java. .

Vantagens da herança em OOPs

Vantagens da herança em OOPs