Polimorfismo de Sobreposição

O Polimorfismo de Sobreposição em Java

Considere que a classe Brinquedo (usada no exercício anterior) possui como descendentes as classes Carro, Avião e Barco, conforme ilustra a Figura 5.

Hierarquia de herança da classe Brinquedo

Observe que as classes filhas sobrepõem o método mover() da classe Brinquedo. Vejamos então como ficam essas classes codificadas em Java na Listagem 6.

Listagem 6 - Implementação em Java da hierarquia da classe Brinquedo

Considerando o método mover() de cada classe filha, como poderíamos chamar o método mover() do brinquedo (classe) correto? Ou seja, como o ControleRemoto saberá que método mover ele deve chamar se ele tem disponível três tipos de mover diferentes (um para cada brinquedo)?

Vamos ver inicialmente como fica a implementação do Controle Remoto na Listagem 7.

Listagem 7 - Classe ControleRemoto

Você lembra que na primeira vez que apresentamos esse exemplo dissemos que a única restrição para um controle remoto tão versátil seria que “quando criado o controle remoto, ele receberia o tipo de brinquedo que iria acionar em um dado instante”? Pois é, é aí que está o segredo para o controle remoto saber qual deve ser o método mover() que ele deve chamar (CORRER, NAVEGAR ou VOAR). O método construtor da classe ControleRemoto exige que o controle para ser inicializado receba um parâmetro do tipoBrinquedo. E isso acontece quando o atributo brinquedo do ControleRemoto recebe “b” (um objeto do tipo Brinquedo).

Então, quando o método mover() da classe ControleRemoto for acionado (isso significa dizer que o botão mover foi apertado), esse faz com que seu atributo brinquedo chame o método mover()correto, dependendo do tipo de Brinquedo que recebeu quando foi instanciado.

A Listagem 8 mostra como fica a classe Principal que instancia um objeto controleRemoto e um objeto carro para ser controlado automaticamente.

Listagem 8 - Classe Principal com o método main

Observe que criamos um brinquedo do tipo Carro, e quando criamos o ControleRemoto, enviamos esse objeto carro para o objeto controleRemoto através da chamada ao seu construtor. Assim, quando acionado o comando controleRemoto.mover(), será chamado o método mover() do carro.

O resultado será a impressão da palavra:

CORRER

Versão 5.3 - Todos os Direitos reservados