De acordo com a Kathy Sierra (não é pergunta sobre certificação) o polimorfismo entra em ação quando é subscrita e não sobrecarga:
“…Portanto, é verdade que o polimorfismo não determina que versão sobrecarregada será chamada; o polimorfismo entra em ação quando a
decisão a tomar aborda que versão subscrita de um método será chamada.”
Ai fiquei na dúvida, pois um professor meu, quando ensinou OO, ele não falou de métodos sobrecarregados nem de métodos subscritos.
Ele tratou a sobrecarga como “polimorfismo estático”, e subscrita como “polimorfismo dinâmico”.
O que é certo e o que é errado nas duas abordagens???
Certo é que não existe “certo” e “errado”. Está mais para “segundo X”, “historicamente Y”, “a maioria dos autores concorda que” ou “o conceito mais aceito diz”.
Vamos pelos dois últimos: em programação, existem 3 tipos de polimorfismo: paramétrico, subtyping e ad-hoc.
Se tratando de programação OO, estamos falando respectivamente de programação genérica (generics do java, os templates do C++), hierarquização (?) de classes (herança/sobrecrita de métodos) e sobrecarga de métodos e operadores.
Agora, se estás dizendo que segundo Kathy Sierra sobrecarga não é polimorfismo… Bom, quem garantiu que há unanimidade?
Pra mim polimorfismo é a capacidade de uma referência de ter comportamentos variados a partir de qual objeto ela referencia e qual metodo.
Uma interface possui um metodo x.E cada classe que implementa essa interface tem sua implementacao propria de x.
Entao x age de maneira polimorfia a depender de quem voce chame
O polimorfismo,tem a mais a ver com sobrescrita do que sobrecarga,porque na verdade a sobrecarga é a criação de um novo metodo, a unica semelhanca eh o nome porem com os argumentos diferentes.
Ja a sobrescrita,voce reescreve o metodo (ou nao), mas ele permanece o mesmo,com a mesma assinatura e geralmente tem comportamento diferente dentro da hierarquia de heranca.
Sobrescrita tem mais a ver com heranca e polimorfismo do que sobrecarga.
o polimorfismo so existe como realmente a kathy falou… o que seu professor falou polimorfismo statico isso nao existe… pelo meu pouco conhecimento em java que tenho… ate pq metodos static nao sao herdados e sim redefinidos o polimorfismo so existe em membros que podem ser herdados para que possa ser mais especificos… nao sei se to certo… mais esse ta de polimorfismo estatico para mim ta fora de cogitação… nunca ouvir livro nenhum falar nisso… se vc pegar deitel, kathy, core java todos esses vai tratar o assunto da mesma forma…