Sobes.tech
Middle

O que são herança e polimorfismo no contexto dos tipos de dados de referência?

sobes.tech IA

Resposta da IA

A herança é um mecanismo que permite criar uma nova classe (derivada, filha), que herda os campos e métodos de uma classe existente (base, pai). Isto promove a reutilização de código e a criação de hierarquias de classes.

O polimorfismo é a capacidade de objetos de diferentes classes de se comportarem de forma uniforme ou de terem comportamentos diferentes ao invocar o mesmo método. Existem dois tipos principais: estático (sobrecarga de métodos) e dinâmico (sobrescrita de métodos).

No contexto de tipos de dados de referência, a herança permite criar uma variável da classe base que pode referenciar um objeto da classe derivada. O polimorfismo neste caso manifesta-se quando, ao chamar um método através dessa variável, a versão do método do tipo real do objeto é executada, não do tipo da referência (polimorfismo dinâmico).

Exemplo em Java:

// Classe base
class Animal {
    public void makeSound() {
        System.out.println("Emite um som");
    }
}

// Classe derivada 1
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Au-au");
    }
}

// Classe derivada 2
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Miau-miau");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Variável do tipo Animal referenciando um objeto Dog
        Animal myCat = new Cat(); // Variável do tipo Animal referenciando um objeto Cat

        myDog.makeSound(); // Chama o método de Dog (polimorfismo)
        myCat.makeSound(); // Chama o método de Cat (polimorfismo)
    }
}

Neste exemplo, myDog e myCat têm tipo de referência Animal, mas graças ao polimorfismo, ao chamar makeSound(), a implementação correspondente de Dog e Cat é executada.