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:
- Herança Única
- Herança múltipla
- Herança multinível
- Herança Hierárquica
- Herança Híbrida
1. Herança Única:
Na herança única, uma classe estende outra classe (apenas uma classe).
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.
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.
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.
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.
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:
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).
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 –
- Um para retirar
- E o outro para ação de depósito.
Uma vez que o funcionamento dessas funções permanece o mesmo em todas as contas.
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.
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.
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.
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.
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.
Abordagem estrutural: Usando a abordagem estrutural, você deve alterar novamente o trecho testado do código de depósito.
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.
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. .