Skip to content

Polimorfismo Dinâmico - Execução

Introdução

  • polimorfismo dinâmico / polimorfismo de execução / sobrescrita de métodos = ocorre quando o método a ser chamado é determinado durante a execução do programa, e não durante a compilação
  • métodos sobrescritos são utilizados para adaptar o comportamento de classes derivadas
  • Esse tipo de polimorfismo é possível através da referência de superclasses para objetos de subclasses
  • permite que um método específico de uma subclasse seja invocado mesmo que a referência usada seja de uma superclasse
  • o método específico a ser executado é decidido durante a execução, com base no tipo real do objeto e não no tipo da referência

Usos

  • permitir que uma superclasse defina comportamentos comuns, enquanto subclasses podem sobrescrever esses comportamentos
  • promover a flexibilidade e a extensibilidade do código, facilitando a implementação de novos comportamentos sem alterar o código existente

Referência de superclasses para objetos de subclasses

  • no polimorfismo dinâmico, uma referência de superclasse pode ser usada para apontar para objetos de subclasses
  • métodos sobrescritos na subclasse podem ser chamados dinamicamente, dependendo do tipo real do objeto em tempo de execução
class Animal {
    // método que será sobrescrito
    public void fazerSom() {
        System.out.println("O animal faz um som.");
    }
}

class Cachorro extends Animal {
    // sobrescreve o método da superclasse
    @Override
    public void fazerSom() {
        System.out.println("O cachorro late");
    }
}

class Gato extends Animal {
    // sobrescreve o método da superclasse
    @Override
    public void fazerSom() {
        System.out.println("O gato mia");
    }
}
public class Main {
    public static void main(String[] args) {
        // referências de superclasse apontando para objetos de subclasses
        Animal meuAnimal1 = new Cachorro();
        Animal meuAnimal2 = new Gato();

        // chamada de métodos, decidida em tempo de execução
        meuAnimal1.fazerSom(); // O cachorro late
        meuAnimal2.fazerSom(); // O gato mia
    }
}
  • no exemplo
    • meuAnimal1 é uma referência da classe Animal, mas aponta para um objeto Cachorro
    • meuAnimal2 é uma referência da classe Animal, mas aponta para um objeto Gato
    • quando fazerSom() é chamado, o método específico da subclasse (Cachorro ou Gato) é executado, graças ao polimorfismo dinâmico

Exercícios

Questões

  1. O polimorfismo dinâmico ocorre quando o método a ser chamado é decidido em tempo de execução.
  2. No polimorfismo dinâmico, a invocação de um método é resolvida em tempo de compilação, com base na assinatura do método.
  3. A sobrescrita de métodos é um exemplo de polimorfismo dinâmico, pois permite que subclasses forneçam implementações específicas para métodos da classe pai.
  4. No polimorfismo dinâmico, é possível utilizar uma referência de classe pai para apontar para um objeto de uma subclasse.
  5. Ao utilizar polimorfismo dinâmico, o método invocado será sempre o da classe pai, mesmo que o objeto seja de uma subclasse.
  6. Para que um método de uma subclasse substitua o método da classe pai, o método na subclasse deve ter a mesma assinatura que o método da classe pai.
  7. O polimorfismo dinâmico em Java permite que métodos sobrecarregados sejam escolhidos em tempo de execução, dependendo do tipo do objeto.
  8. A palavra-chave super pode ser usada em métodos sobrescritos para acessar a implementação do método na classe pai.
  9. No polimorfismo dinâmico, o tipo do objeto determina qual método será invocado, mesmo que a variável de referência seja do tipo da classe pai.
  10. Um método sobrescrito na subclasse pode ter uma assinatura diferente da do método da classe pai, pois o polimorfismo dinâmico não exige a mesma assinatura.

Gabarito

  1. Verdadeiro: polimorfismo dinâmico ocorre quando a decisão de qual método invocar é feita em tempo de execução, geralmente através da sobrescrita de métodos.
  2. Falso: no polimorfismo dinâmico, a invocação é resolvida em tempo de execução, com base no tipo real do objeto, e não em tempo de compilação.
  3. Verdadeiro: a sobrescrita de métodos permite que uma subclasse forneça sua própria implementação de um método definido na classe pai, sendo um exemplo clássico de polimorfismo dinâmico.
  4. Verdadeiro: em polimorfismo dinâmico, é comum usar uma referência de uma classe pai para apontar para um objeto de uma subclasse, o que permite flexibilidade no código.
  5. Falso: o método invocado será o da subclasse, se o objeto for de uma subclasse, mesmo que a referência seja da classe pai. O tipo real do objeto determina o método a ser executado.
  6. Verdadeiro: para que uma subclasse substitua um método da classe pai, é necessário que o método sobrescrito tenha a mesma assinatura (mesmo nome, parâmetros e tipos de retorno).
  7. Falso: polimorfismo dinâmico não está relacionado à escolha de métodos sobrecarregados, que é feita em tempo de compilação. O polimorfismo dinâmico está relacionado à sobrescrita de métodos.
  8. Verdadeiro: a palavra-chave super permite acessar a implementação do método da classe pai dentro de um método sobrescrito, fornecendo acesso à versão original.
  9. Verdadeiro: em polimorfismo dinâmico, o tipo real do objeto determina qual método será chamado, mesmo que a referência seja do tipo da classe pai.
  10. Falso: para que um método seja considerado sobrescrito no contexto de polimorfismo dinâmico, ele deve ter a mesma assinatura que o método da classe pai.