Herança em Java (com exemplo)

⚡ Resumo Inteligente

Herança em Java É um mecanismo no qual uma classe adquire os campos e métodos de outra classe através da palavra-chave `extends`. Isso promove a reutilização de código e modela uma relação "é um" entre uma superclasse e suas subclasses.

  • 🧬 Definição de Herança: Uma classe adquire os campos e métodos de outra usando o método `extends`.
  • ðŸ'¨â € ðŸ '© â € ðŸ'§ Relação "É um": Modela uma hierarquia de classe pai (superclasse) e classe filha (subclasse).
  • 🗂️ Cinco tipos: Herança simples, múltipla, multinível, hierárquica e híbrida.
  • 🚫 Java Limitação: Java Não suporta herança múltipla ou híbrida por meio de classes.
  • 🔑 Superpalavra-chave: Acessa variáveis, métodos e construtores da classe pai a partir de uma subclasse.
  • Benefício: Reutiliza código testado e adiciona funcionalidades através de novas classes sem modificar as existentes.

Herança em Java

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.

Observação: 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ê simplesmente criará uma nova classe com sua implementação exclusiva do método de depósito (destacado em vermelho na imagem abaixo). Portanto, embora a programação estruturada pareça uma abordagem mais fácil inicialmente, a POO se mostra mais vantajosa 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

Perguntas Frequentes

Java Evita a herança múltipla de classes para prevenir o "problema do diamante", onde o compilador não consegue decidir qual método herdado usar. Em vez disso, Java Permite que uma classe implemente múltiplas interfaces para alcançar flexibilidade semelhante de forma segura.

A palavra-chave `this` refere-se ao objeto atual e seus membros, enquanto `super` refere-se à classe pai imediata. Use `super` para chamar variáveis, métodos ou construtores da classe pai a partir de uma subclasse.

A herança modela uma relação "É um/uma", onde uma subclasse estende uma classe pai. A composição modela uma relação "Tem um/uma", onde uma classe contém outros objetos. A composição costuma ser mais flexível e é preferida para projetos com baixo acoplamento.

A IA pode analisar responsabilidades de classe, sugerir classes base compartilhadas, recomendar interfaces em vez de herança profunda e sinalizar código duplicado, ajudando no gerenciamento de código.ping Os desenvolvedores criam hierarquias limpas e reutilizáveis ​​que seguem os princípios do design orientado a objetos.

Sim. A análise estática assistida por IA pode medir a profundidade da herança, sinalizar hierarquias frágeis ou excessivamente aninhadas e sugerir refatorações em direção à composição ou interfaces para melhorar a manutenção e reduzir o acoplamento forte.

Resuma esta postagem com: