A herança é um dos pilares fundamentais da Programação Orientada a Objetos (POO). Permite criar novas classes a partir de classes existentes, reutilizando e adaptando o código conforme necessário. Este conceito é extremamente útil para reduzir a redundância, promover a reutilização de código e facilitar a manutenção.
O Que é Herança?
Herança é o mecanismo pelo qual uma classe (chamada de subclasse ou classe derivada) pode adquirir as propriedades e métodos de outra classe (chamada de superclasse ou classe base). Quando uma classe herda de outra, ela herda os métodos e atributos da classe base, podendo também adicionar novos métodos e atributos ou redefinir os existentes.
Exemplo Prático
Vamos considerar um exemplo simples para ilustrar a herança. Suponha que temos uma classe base Animal
, que possui atributos e métodos comuns a todos os animais.
class Animal:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def emitir_som(self):
pass
def info(self):
return f'Nome: {self.nome}, Idade: {self.idade}'
Agora, podemos criar subclasses que herdam da classe Animal
, adicionando características específicas para cada tipo de animal.
class Cao(Animal):
def __init__(self, nome, idade, raca):
super().__init__(nome, idade)
self.raca = raca
def emitir_som(self):
return 'Au au!'
def info(self):
return f'Nome: {self.nome}, Idade: {self.idade}, Raça: {self.raca}'
class Gato(Animal):
def __init__(self, nome, idade, cor):
super().__init__(nome, idade)
self.cor = cor
def emitir_som(self):
return 'Miau!'
def info(self):
return f'Nome: {self.nome}, Idade: {self.idade}, Cor: {self.cor}'
Neste exemplo, Cao
e Gato
são subclasses que herdam da classe Animal
. Cada subclasse redefine o método emitir_som
e adiciona um atributo específico (raca
para Cao
e cor
para Gato
).
Reutilização de Código
A reutilização de código é uma das grandes vantagens da herança. No exemplo acima, todas as funcionalidades comuns aos animais estão definidas na classe Animal
, e as subclasses Cao
e Gato
reutilizam estas funcionalidades sem necessidade de replicar o código.
Herança na prática
Vamos criar instâncias das subclasses e verificar como os métodos herdados e redefinidos funcionam.
cao = Cao('Rex', 5, 'Labrador')
gato = Gato('Felix', 3, 'Preto')
print(cao.info()) # Nome: Rex, Idade: 5, Raça: Labrador
print(cao.emitir_som()) # Au au!
print(gato.info()) # Nome: Felix, Idade: 3, Cor: Preto
print(gato.emitir_som()) # Miau!
Neste código, criamos um objeto da classe Cao
e outro da classe Gato
. Os métodos info
e emitir_som
funcionam conforme esperado, ilustrando como a herança simplifica a reutilização e extensão do código.
Resumo
- Herança permite criar novas classes a partir de classes existentes.
- Superclasse é a classe base que fornece atributos e métodos.
- Subclasse é a nova classe que herda da superclasse, podendo adicionar ou redefinir funcionalidades.
- Redefinir Métodos permite às subclasses fornecerem implementações específicas para os métodos herdados.
Quiz
-
O que é uma superclasse?
- a) Uma classe que herda de outra classe
- b) Uma nova classe criada a partir de uma classe existente
- c) Uma classe origem que fornece atributos e métodos para outras classes
- d) Uma classe que não pode ser herdada
-
Qual das seguintes afirmações é verdadeira em relação à herança?
- a) Permite criar classes completamente independentes.
- b) Evita a reutilização de código.
- c) Promove a duplicação de código.
- d) Facilita a manutenção do código.
-
O que acontece quando uma subclasse redefine um método da superclasse?
- a) O método original é sempre chamado primeiro.
- b) Apenas o método redefinido na subclasse é chamado.
- c) O método redefinido na subclasse é ignorado.
- d) Ambos os métodos (subclasse e superclasse) são chamados automaticamente.
Respostas do Quiz:
- c) Uma classe origem que fornece atributos e métodos para outras classes
- d) Facilita a manutenção do código
- b) Apenas o método redefinido na subclasse é chamado