polimorfismo estático / polimorfismo de compilação / sobrecarga de métodos = ocorre quando o compilador é capaz de determinar, durante a compilação, qual método será invocado
caracterizado pela sobrecarga de métodos / overloading
esse tipo de polimorfismo se refere a quando uma classe tem múltiplos métodos com o mesmo nome, mas com assinaturas diferentes, como parâmetros diferentes em tipo ou número
o compilador escolhe qual versão do método chamar com base na correspondência de tipos no momento da compilação
este tipo de polimorfismo melhora a legibilidade e a flexibilidade do código
permite que os desenvolvedores usem o mesmo nome de método para ações relacionadas, mas com diferentes tipos de entradas
// Polimorfismo estáticopublicclassCalculadora{// 3 versões para o método somar// método para somar dois números inteirospublicintsomar(inta,intb){returna+b;}// método para somar três números inteirospublicintsomar(inta,intb,intc){returna+b+c;}// método para somar dois números de ponto flutuantepublicdoublesomar(doublea,doubleb){returna+b;}}
no exemplo, quando o método somar for chamado em uma instância de Calculadora, o compilador escolherá a versão correta do método a ser invocada com base nos parâmetros passados para o método
publicclassMain{publicstaticvoidmain(String[]args){Calculadoracalc=newCalculadora();// chama o método que soma dois números inteirosSystem.out.println(calc.somar(5,10));// saída: 15// chama o método que soma três números inteirosSystem.out.println(calc.somar(5,10,15));// saída: 30// chama o método que soma dois números de ponto flutuanteSystem.out.println(calc.somar(5.5,10.5));// saída: 16.0}}
assinatura diferente = para que o método seja considerado sobrecarregado, a assinatura - nome e parâmetros - deve ser diferente. Isso pode incluir:
diferente número de parâmetros
diferente tipo de parâmetros
diferente ordem dos parâmetros
publicclassExemplo{// Método válido: diferente número de parâmetrospublicvoidmetodo(inta){}// Método válido: tipo de parâmetro diferentepublicvoidmetodo(Stringa){}// Método inválido: assinatura idêntica ao anteriorpublicvoidmetodo(intb){}// Erro, já existe um método com a mesma assinatura}
tipo de retorno não conta = o tipo de retorno não é considerado parte da assinatura do método
por isso, não é possível sobrecarregar métodos apenas alterando o tipo de retorno
publicclassExemplo{// método válidopublicintsomar(inta,intb){returna+b;}// erro: tentativa de sobrecarga apenas com tipo de retorno diferentepublicdoublesomar(inta,intb){returna+b;}// Erro: assinatura igual}
Verdadeiro: polimorfismo estático ocorre quando o método é resolvido em tempo de compilação. A resolução é feita com base na assinatura do método, ou seja, no número e tipo dos parâmetros.
Falso: no polimorfismo estático, a resolução do método é feita em tempo de compilação, e não em tempo de execução. O tipo do objeto não é o que determina qual método será chamado nesse caso.
Verdadeiro: a sobrecarga de métodos (ter métodos com o mesmo nome, mas com diferentes parâmetros) é um exemplo clássico de polimorfismo estático, pois o método correto é resolvido em tempo de compilação, dependendo da assinatura.
Verdadeiro: o polimorfismo estático permite que dois métodos tenham o mesmo nome, mas uma diferença em seus tipos de parâmetros ou no número de parâmetros. Isso é uma característica da sobrecarga de métodos.
Falso: no polimorfismo estático, a escolha do método é feita em tempo de compilação, com base na assinatura do método (número e tipo de parâmetros), e não com base no tipo do objeto em tempo de execução.
Falso: o polimorfismo estático não está relacionado à anotação @Override. A anotação é usada no polimorfismo dinâmico (sobrescrita de métodos), onde o método é resolvido em tempo de execução.
Verdadeiro: no polimorfismo estático, o compilador escolhe qual método chamar com base no número e tipo de parâmetros passados na invocação. Isso é chamado de sobrecarga de métodos.
Falso: o polimorfismo estático não é necessariamente mais flexível que o polimorfismo dinâmico. O polimorfismo dinâmico, ao contrário, permite a substituição de métodos em tempo de execução, o que dá mais flexibilidade em muitos cenários.
Falso: a sobrecarga de métodos é uma característica do polimorfismo estático, pois é resolvida em tempo de compilação. O polimorfismo dinâmico envolve sobrescrita de métodos, resolvida em tempo de execução.
Falso: no polimorfismo estático (sobrecarga de métodos), os métodos devem ter o mesmo nome, mas diferentes assinaturas (tipos ou número de parâmetros). Isso permite que o compilador escolha o método correto.