DC-UFRPE/Licenciatura Plena em Computação/Programação II/Herança
Herança
[editar | editar código-fonte]A herança é um conceito fundamental da Programação Orientada a Objetos (POO) que permite a criação de novas classes a partir de classes já existentes. É uma técnica de reutilização de código que ajuda a evitar duplicação de código e a simplificar a estruturação dos programas.
Conceito
[editar | editar código-fonte]Em POO, a herança é um mecanismo pelo qual uma classe pode herdar propriedades e comportamentos de outra classe. A classe que herda é chamada de classe derivada ou subclasse, enquanto a classe que é herdada é chamada de classe base ou superclasse.
A herança permite que a classe derivada reutilize o código da classe base, estendendo ou modificando seu comportamento. A subclasse pode adicionar novos membros de dados e métodos à sua própria definição de classe, além de herdar todos os membros públicos e protegidos da classe base.
Exemplo
[editar | editar código-fonte]Para ilustrar a herança em POO, vamos considerar um exemplo:
// Classe pai
class Animal {
String nome;
int idade;
public Animal(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public void emitirSom() {
System.out.println("O animal emite um som.");
}
}
// Classe filha
class Cachorro extends Animal {
public Cachorro(String nome, int idade) {
super(nome, idade);
}
public void latir() {
System.out.println("O cachorro está latindo.");
}
}
// Classe principal
class Main {
public static void main(String[] args) {
Cachorro dog = new Cachorro("Toto", 2);
System.out.println("Nome: " + dog.nome);
System.out.println("Idade: " + dog.idade);
dog.emitirSom();
dog.latir();
}
}
Neste exemplo, temos uma classe pai Animal
, que tem duas propriedades (nome
e idade
) e um método (emitirSom
). Em seguida, criamos uma classe filha Cachorro
que herda de Animal
e adiciona um novo método (latir
).
No método main
, criamos um novo objeto Cachorro
e chamamos seus métodos emitirSom
e latir
, além de acessar suas propriedades nome
e idade
.
Vantagens
[editar | editar código-fonte]As principais vantagens da herança em POO são:
- Reutilização de código: A herança permite que as classes filhas herdem os atributos e métodos das classes pai, evitando a duplicação de código e economizando tempo e esforço de programação.
- Extensibilidade: As classes filhas podem adicionar novos atributos e métodos à sua implementação original da classe pai, permitindo que as classes sejam estendidas para atender às novas necessidades do programa.
- Facilitação da manutenção do código: A herança ajuda na manutenção do código, pois as atualizações realizadas na classe pai são refletidas automaticamente nas classes filhas, garantindo que todas as instâncias das classes filhas sejam atualizadas.
- Polimorfismo: A herança permite o polimorfismo, o que significa que as instâncias de uma classe filha podem ser tratadas como instâncias da classe pai, permitindo que o código seja mais flexível e genérico.
- Simplificação do código: A herança permite que as classes sejam organizadas em uma hierarquia, tornando o código mais fácil de entender e de se trabalhar. Isso também facilita a modularização do código e permite que as classes sejam agrupadas em módulos reutilizáveis.
Desvantagens
[editar | editar código-fonte]Algumas das principais desvantagens da herança em POO são:
- Aumento da complexidade: A herança pode tornar o código mais complexo e difícil de entender, especialmente em casos de herança múltipla.
- Acoplamento entre classes: A herança pode aumentar o acoplamento entre as classes, o que pode tornar o código mais difícil de modificar e manter.
- Dependência de implementações: A herança pode fazer com que as subclasses dependam da implementação da classe pai, o que pode dificultar a manutenção e a evolução do código.
- Fragilidade: Mudanças na classe pai podem afetar as subclasses, o que pode levar a problemas de compatibilidade e de comportamento inesperado.
- Limitações na reutilização de código: A herança pode limitar a reutilização de código em situações em que a estrutura da classe pai não é adequada para as subclasses.