Eu não considero overloading um tipo de polimorfismo!
Se poliformismo é a capacidade de um objeto se comportar de forma diferente dependendo de sua implementação, então não acho que overloading seja um tipo de polimorfismo, por exemplo.
try {
Politico p = new ZeDirceu();
p.sacaDinheiroDeMarcosValerio(500000.00);
}catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
Neste exemplo o dinheiro seria sacado sem problemas!
try {
Politico p = new ValdemarCostaNeto();
p.sacaDinheiroDeMarcosValerio(500000.00);
}catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
A saída desta rotina seria a seguinte mensagem:
“Você executou uma operação ilegal”, que nada mais é do que a mensagem de exceção!
Como podemos ver, o método p.sacaDinheiroDeMarcosValerio(500000.00) possui um comportamente diferente para os dois casos, mesmo sendo o mesmo método. Logo, eu entendo isso como polimorfismo! Mas eu sobrepor este método passando uma String por parâmetro ao invés de um double, não vai estar mudando o comportamento do objeto, apenas é um método a mais!
É isso que eu entendo de polimorfismo, e a uma semana atrás exatamente eu achava que sobreposição também era polimorfismo, e se não me engano, realmente há livros que defendam que sobreposição é polimorfismo!
Abraços!
Thiago Senna