Exercícios Resolvidos de Polimorfismo

Ver Teoria

Enunciado

Observe a classe P a c i e n t e

Crie uma classe derivada de P a c i e n t e chamada N a o A s s e g u r a d o que possui os atributos f l o a t   C o n s u l t a , i n t   B a n c o , i n t   C h e q u e . Na classe N a o A s s e g u r a d o   crie um construtor para a classe e métodos getters para os atributos, e implemente o método P r i n t   que mostre os valores de todos os atributos.

Passo 1

Vamos que vamos, pessoal!

Essa questão já deu pra gente a classe mãe e pediu pra criar uma classe filha. O detalhe da questão é que ela pede pra gente criar um método P r i n t ( ) dentro da classe filha: isso é um polimorfismo!

Vamos escrevendo a classe da questão dentro do nosso código:

Essa classe possui um atributo protegido e dois métodos públicos. O atributo N o m e que deve armazenar o nome do paciente, o método G e t N o m e que retorna o valor do atributo N o m e e o método virtual P r i n t (   ) que imprime um texto com os dados do paciente.

O método P r i n t ( ) é virtual, isso quer dizer que desde o começo ele foi pensado para sofrer polimorfismo.

Passo 2

Vamos recordar como se cria uma herança:

c l a s s   N o m e F i l h a   : p u b l i c   N o m e M a e

Agora, vamos criar uma classe N a o A s s e g u r a d o herdando a classe base P a c i e n t e :

Agora os atributos e métodos da classe mãe foram copiados para a classe filha. O próximo passo é adicionar os novos atributos que são exclusivos da classe filha:

Para inicializar os atributos da classe vamos desenvolver um construtor. Lembre-se que construtores são funções sem tipo que têm o mesmo nome da classe.

Fique atento a dois detalhes: o atributo N o m e é protegido e por isso podemos acessá-lo sem dificuldades, e o segundo é que a classe mãe não possui um construtor e por isso a gente não precisa chamar o construtor da classe mãe.

O próximo passo é criar os métodos getters para que seja possível acessar os novos atributos privados:

Belezinha, a classe está quase pronta. Só falta desenvolver o método P r i n t (   )

Passo 3

A classe N a o A s s e g u r a d o herdou o método P r i n t   da classe mãe. Mas da forma como foi herdado, esse método não consegue utilizar todos os atributos da classe N a o A s s e g u r a d o

A melhor solução é executar um polimorfismo que consiste em reescrever o método P r i n t   .

A vantagem de usar um polimorfismo é que a classe filha vai continuar com uma estrutura semelhante a da classe mãe. O que pode ser super útil quando a gente utiliza ponteiros, ou quando existem outros métodos que fazem chamada ao método “polimorfado”.

Para executar o polimorfismo, é só declarar o método P r i n t (   ) novamente, e nem é preciso usar a palavra chave v i r t u a l . Depois é só escrever o código que a gente quiser dentro do método “polimorfado”

Nesse caso, a gente vai adicionar vários c o u t para imprimir cada um dos atributos.

Só pra esclarecer “polimorfado” não é uma palavra de verdade 😂😂! Então não vai escrever isso na sua prova não 🤣🤣🤣

Passo 4

Show! Agora vamos testar pra ver se deu tudo certo.

Vamos criar um objeto da classe N a o A s s e g u r a d o , e usando o construtor vamos preencher os valores dos atributos. Em seguida vamos executar o método P r i n t :

E o resultado é esse:

Resposta