Junior
O que são herança e polimorfismo em tipos de dados de referência?
sobes.tech IA
Resposta da IA
A herança é um mecanismo que permite a uma nova classe (subclasse/filha) herdar propriedades (campos) e comportamentos (métodos) de uma classe existente (superclasse/pai), expandindo ou sobrescrevendo a funcionalidade. Isto promove a reutilização de código e estabelece relações de "é um" (is-a).
O polimorfismo é a capacidade de objetos de diferentes classes responderem de forma diferente ao mesmo nome de método, dependendo do seu tipo específico em tempo de execução. Ele fornece flexibilidade e extensibilidade ao código, permitindo tratar objetos de subclasses através de uma referência à superclasse.
Nestes tipos de dados por referência (classes), estes conceitos desempenham um papel fundamental:
- Herança: A subclasse tem acesso aos membros da superclasse e pode adicionar os seus próprios ou modificar o comportamento dos métodos herdados (sobrescrita - overriding). Um objeto da subclasse pode ser utilizado em qualquer lugar onde se espere um objeto da superclasse.
- Polimorfismo: Diferentes objetos relacionados com uma mesma hierarquia de herança podem ser tratados pelo mesmo código, chamando o mesmo método, mas a implementação desse método será específica para o tipo de objeto em tempo de execução.
Exemplo em Java:
// Superclasse (pai)
class Animal {
public void makeSound() {
System.out.println("Faz um som");
}
}
// Subclasse (filha), herda de Animal
class Dog extends Animal {
// Sobrescreve o método da superclasse
@Override
public void makeSound() {
System.out.println("Au!");
}
}
// Subclasse (filha), herda de Animal
class Cat extends Animal {
// Sobrescreve o método da superclasse
@Override
public void makeSound() {
System.out.println("Miau!");
}
}
// Exemplo de polimorfismo
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // objeto da superclasse
Animal myDog = new Dog(); // objeto da subclasse, referência à superclasse
Animal myCat = new Cat(); // objeto da subclasse, referência à superclasse
myAnimal.makeSound(); // Vai imprimir: Faz um som
myDog.makeSound(); // Vai imprimir: Au! (polimorfismo - método do Dog)
myCat.makeSound(); // Vai imprimir: Miau! (polimorfismo - método do Cat)
}
}