Herança e Polimorfismo
Herança e polimorfismo são dois dos conceitos fundamentais da programação orientada a objetos. Eles permitem a criação de hierarquias de classes e a capacidade de objetos de diferentes classes se comportarem de maneira semelhante.
Herança
A herança é a capacidade de uma classe herdar atributos e métodos de uma classe mãe (ou superclasse). Isso permite que uma classe filha (ou subclasse) tenha todos os recursos da classe mãe e ainda acrescente novos recursos próprios. A herança é definida usando a palavra-chave extends
.
public class Subclasse extends ClasseBase {
// Campos e métodos adicionais da subclasse
}
A classe Subclasse
herda todos os campos e métodos marcados como public
e protected
da classe ClasseBase
. Isso significa que você pode usar esses campos e métodos na subclasse sem precisar reescrevê-los.
Por exemplo, considere a seguinte classe Animal
:
public class Animal {
protected String nome;
public Animal(String nome) {
this.nome = nome;
}
public void fazerBarulho() {
System.out.println("O animal está fazendo barulho!");
}
}
Agora, podemos criar uma subclasse chamada Cachorro
que herda da classe Animal
:
public class Cachorro extends Animal {
public Cachorro(String nome) {
super(nome);
}
public void fazerBarulho() {
System.out.println("O cachorro está latindo!");
}
}
A classe Cachorro
herda o campo nome
e o método fazerBarulho()
da classe Animal
. No entanto, ele também redefine o método fazerBarulho()
para que ele exiba uma mensagem diferente. Além disso, a palavra-chave super
deve ser usada no construtor da classe Cachorro
para chamar o construtor da classe mãe, Animal
.
Polimorfismo
Polimorfismo é a capacidade de objetos de diferentes classes se comportarem de maneira semelhante. Isso é feito usando interfaces ou classes abstratas, que definem um conjunto de métodos que uma classe deve implementar para se adequar a essa interface ou classe (abstrata ou concreta). Dessa forma, podemos tratar objetos de diferentes classes que implementam a mesma interface ou classe abstrata de maneira semelhante.
Exemplificando, considere a mesma classe Animal
apresentada acima:
public class Cachorro extends Animal {
@Override
public void fazerBarulho() {
System.out.println("O cachorro late.");
}
}
public class Gato extends Animal {
@Override
public void fazerBarulho() {
System.out.println("O gato mia.");
}
}
public class Teste {
public static void main(String[] args) {
Animal animal1 = new Cachorro();
Animal animal2 = new Gato();
animal1.fazerBarulho(); // Saída: O cachorro late.
animal2.fazerBarulho(); // Saída: O gato mia.
}
}
A classe Animal
, define métodos comuns a todos os animais. Então, a classe Cachorro
e a classe Gato
como subclasses de Animal
são tratadas como animais. Podemos chamar métodos comuns a todos os animais, como o método fazerBarulho
, em qualquer objeto que implemente a interface Animal
, independentemente de ser um Cachorro
ou um Gato
.
Importante mencionar que a mesma situação pode ser replicada se implementada com o uso de, ao invés de uma classe concreta, uma classe abstrata ou uma interface. O importante para ser considerado polimorfismo é ser replicada a situação no método main
da classe Teste
onde dois objetos do tipo Animal
executam ações diferentes devido a diferentes implementações.
Referências
Last updated