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
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
classAnimal{// método que será sobrescritopublicvoidfazerSom(){System.out.println("O animal faz um som.");}}classCachorroextendsAnimal{// sobrescreve o método da superclasse@OverridepublicvoidfazerSom(){System.out.println("O cachorro late");}}classGatoextendsAnimal{// sobrescreve o método da superclasse@OverridepublicvoidfazerSom(){System.out.println("O gato mia");}}
publicclassMain{publicstaticvoidmain(String[]args){// referências de superclasse apontando para objetos de subclassesAnimalmeuAnimal1=newCachorro();AnimalmeuAnimal2=newGato();// chamada de métodos, decidida em tempo de execuçãomeuAnimal1.fazerSom();// O cachorro latemeuAnimal2.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
O polimorfismo dinâmico ocorre quando o método a ser chamado é decidido em tempo de execução.
No polimorfismo dinâmico, a invocação de um método é resolvida em tempo de compilação, com base na assinatura do método.
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.
No polimorfismo dinâmico, é possível utilizar uma referência de classe pai para apontar para um objeto de uma subclasse.
Ao utilizar polimorfismo dinâmico, o método invocado será sempre o da classe pai, mesmo que o objeto seja de uma subclasse.
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.
O polimorfismo dinâmico em Java permite que métodos sobrecarregados sejam escolhidos em tempo de execução, dependendo do tipo do objeto.
A palavra-chave super pode ser usada em métodos sobrescritos para acessar a implementação do método na classe pai.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.