Polimorfismo
O polimorfismo, que significa muitas formas, permite que uma mesma referência se comporte de formas diferentes. Utilizando corretamente o polimorfismo nós podemos fazer o código ficar mais claro, genérico e, portanto, reutilizável.
Polimorfismo é a capacidade de uma referencia de um tipo genérico referenciar um objeto de um tipo mais específico.
Polimorfismo pode substituir um método da classe pai por um método de uma classe secundaria (Override), ou pode ser um mesmo método porem com parâmetros diferentes (Overload);
Segue abaixo um exemplo: public class MainModulo09 { public static void main(String[] args) {
Veiculo veiculo = criarVeiculo(args[0]); veiculo.buzinar(); } public static Veiculo criarVeiculo(String tipo){ if(tipo.equals("utilitario")){ return new Utilitario();
}else if(tipo.equals("passeio")){ return new CarroPasseio();
} else return new Jipe();
}
}
A invocação do método buzinar() na variável “veiculo” é feita de forma polimórfica, isto é, pode possuir diversos comportamentos diferentes. O resultado desta invocação será apenas conhecido em tempo de execução pois, dependendo do parâmetro de entrada do método main o objeto retornado pelo método criarVeiculo() será de tipos diferentes.
Perceba que a variável “veiculo” é do tipo Veiculo, ou seja, ela pode referenciar objetos das classes Jipe, CarroPasseio e Utilitario, afinal, conforme visto, todas estas classes são também do tipo Veiculo (Herança).
Ao declararmos a variável “veiculo” utilizamos o tipo Veiculo, superclasse das demais classes, observe o trecho de código abaixo:
A situação acima identificada resulta em erro de compilação, isto acontece porque o método “ligarArCondicionado()” não faz parte da classe Veiculo ou de uma de suas superclasses, ou seja, o compilador verifica se o método existe em tempo de compilação.
Desta forma, mesmo que você tenha certeza que naquele momento a variável fará referência um objeto do tipo CarroPasseio, o