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 A s s e g u r a d o que possui os atributos s t r i n g   S e g u r a d o r a e i n t   N u m S e g u r o . Na classe A s s e g u r a d o   crie um construtor para a classe e métodos getters para os atributos, implemente o método P r i n t   que mostre os valores de todos os atributos.

Passo 1

E aí, beleza?! Vamos resolver esse exercício!

A questão entregou pra gente uma classe e pede pra gente criar uma filha. A nova classe terá novos métodos e atributos.

Mas a chave da questão é que a classe filha vai ter um novo método chamado P r i n t (   ) , ou seja, vamos executar polimorfismo neste método.

Mas antes de começar, vamos escrever a classe da questão dentro do nosso código:

Vamos analisar esse código antes de prosseguir. A classe possui um atributo protegido e dois métodos públicos.

O atributo é chamado N o m e que, podemos presumir, vai armazenar o nome do paciente.

O primeiro método é simplesmente um getter que apenas retorna o valor do atributo N o m e .

E o segundo método é o P r i n t (   ) que imprime um texto com os dados do paciente, nesse caso, apenas o atributo nome. Note que esse é um método virtual, isso quer dizer que ele foi pensado desde o começo para sofrer polimorfismo.

Passo 2

Vamos começar criando a classe A s s e g u r a d o herdando a classe base P a c i e n t e . Lembre-se, a gente executa uma herança assim:

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

No código fica assim:

Agora os atributos e métodos da classe mãe foram copiados para a classe filha.

Em seguida, vamos adicionar na classe filha os seus novos atributos: uma string S e g u r a d o r a que armazena o nome da seguradora e o inteiro N u m S e g u r o que armazena o número do seguro.

Agora vamos desenvolver os métodos. Primeiro, precisamos inicializar os atributos da classe, e pra isso vamos usar um construtor.

Note que a classe mãe não possui um construtor. Isso quer dizer que a gente não precisa chamar o construtor da classe mãe. Então, vamos simplesmente fazer um construtor simples para a classe filha.

Outro detalhe é que o atributo N o m e é protegido. E isso quer dizer que a classe filha tem acesso direto a esse atributo, então podemos modifica-lo sem problemas.

Para desenvolver o construtor, é só você lembrar que construtores são funções sem tipo que têm o mesmo nome da classe:

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

Ainda dentro da nossa classe, vamos dar desenvolver o método P r i n t   .

A classe A s s e g u r a d o já têm um método chamado P r i n t   que foi herdado da classe mãe. Porém, a versão que foi herdada imprime apenas o atributo N o m e .

A solução é executar um polimorfismo! Nós vamos reescrever uma nova função com o nome P r i n t   .

Primeiro a gente declarou o método na linha 34, perceba que não é preciso escrever a palavra chave v i r t u a l .

Depois, nas linhas 35 a 39 a gente escreveu novas instruções para o método P r i n t   !

Polimorfismo é super tranquilo de fazer. É só sobrescrever o método antigo com um novo método usando o mesmo nome. 😊

E pronto! A classe está concluída.

Passo 4

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

Vamos criar um objeto da classe 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