[Música] fala Mestres beleza no vídeo de hoje nós vamos ver aqui sobre polimorfismo né a gente vai entender aqui o que que é e ver o exemplo aqui no nosso código tá então eu já tô aqui com o arquivo criado com o código preparado né que é basicamente o código que nós vimos na aula passada né de herança e então nós temos aqui animal e pássaro né onde pássaro é uma extensão de animal e a ideia de polimorfismo né só recapitulando aqui é basicamente a a capacidade de um objeto ser referenciado de forma igual independente
ali do nível de de herança né de de derivação que a gente aplica em cima dele tá então para a gente vê isso aqui a gente vai a gente vai criar aqui mais uma uma classe tá pra gente conseguir de fato enxergar de que o o o objeto ele tá sendo acessado de diferentes formas né o próprio a própria o próprio significado né de polimorfismo de várias formas é que e e no final O resultado vai ser nós teremos diferentes objetos diferentes formas né mas eh o objeto o a execução ali do método do objeto
vai ser a mesma não a mesma mas vai ser adaptada para diferentes objetos mas o a forma o método em si vai ser o mesmo né no final é isso o comportamento a forma de executar vai ser a mesma só que isso vai vir de objetos diferentes tá de diferentes formas né então vamos lá eu tenho animal eu tenho pássaro e eu vou criar aqui um um algo mais específico né de pássaro então eu vou criar aqui o Papagaio e note só que o papagaio ele vai estender pássaro Beleza então o pássaro estende animal papagaio
estende pássaro correto bom é bom prestar atenção nisso tá mas vamos lá eh aqui em papagaio né nós teremos um Construtor parecido aqui com password então eu vou copiar e colar aqui pra gente não perder muito tempo e o que vai ter a mais aqui no caso do papagaio é se ele sabe ou não falar né então eu vou ter uma variável nova aqui vai ser sabe falar e eu tô passando as variáveis novas sempre aqui no início do Construtor mas a ordem aqui tanto faz tá E no super a ordem importa porque é a
ordem que dos parâmetros que o Construtor né da da da outra classe recebe então se eu passar aqui igual no caso pássaro né é Bico nome cor e tamanho se eu passar cor no na na primeira posição que seria era para ser bico aí a informação vai ficar errada tá então na hora de criar o Construtor tanto faz a ordem mas quando a gente chama super tem que tá coerente com a classe com a superclasse né a classe pai beleza então vamos lá papagaio ele sabe ou não falar então vou criar aqui a variável ó
que vai ser o membro né sabe falar e vai começar como falso Isso aqui pode ser um boleano e no super aqui eu vou passar bico nome cor e tamanho né que é o super de pássaro Então vou dar um super aqui ó bico nome cor e tamanho e sabe falar vai ficar aqui depois eu vou atribuir né o valor de sab que eu recebi para sabe falar no membro aqui da nossa classe que também é eh a variável né sabe falar então o que que a gente pode eh faz que eu diz sabe falar
vai receber o parâmetro sabe falar aqui para para diferenciar as coisas normalmente o pessoal gosta de colocar uma um underline né nas variáveis nos membros né da classe então ficaria o under né sabe falar para diferenciar o que eu recebi o que eu recebi no Construtor e o que é realmente membro da classe isso pras variáveis né o pessoal gosta bastante de usar esse under tá mas aqui o que que eu tenho tenho novamente animal pássaro papagaio ondeo estende animal papagaio estende pássaro então eu vou criar uma classe desses caras aqui uma Instância na verdade
né vou criar uma estância de animal pássaro e papagaio Então vamos fazer isso aqui ó conste animal vai ser um New animal pássaro e vai ser um lio papagaio e aqui eu vou criar né as instâncias para o o passar aqui os parâmetros né então o animal ele tem o nome cor e tamanho o animal vai ser o Rex né então o Rex ele é verde e o tamanho dele é 10 o pássaro ele o bico dele é Curvo né a ordem aqui Curvo ele o nome dele ele aqui o b b b os dedos
aqui tá travado a cor amarelo e o tamanho um e o papagaio ele vai ser sabe falar sim né então aqui vai ser true ele o bico dele também é Curvo o nome dele é o louro é né e a cor dele é principalmente verde né e o tamanho dele é dois tá só paraa gente ter uns parâmetros diferent aí então beleza nós temos aí diferentes objetos e aqui agora a gente vai entender o sobre sobrecarga de métodos pra gente conseguir chegar nesse resultado final do polimorfismo tá então o que que acontece todos esses caras
aqui tanto animal quanto pássaro quanto papagaio todos eles têm aí o método dormir tá porque dormir tá definido aqui em animal né E todos estão estendendo o animal e diretamente no caso de pássaro E indiretamente no caso de papagaio né porque papagaio estende pássaro pássaro estende animal então se eu chamar aqui ó animal pon dormir pássaro ponto dormir e papagaio ponto dormir certo todos Eles dormem e executando Aqui nós temos o Rex está dormindo pi está dormindo e o louro José também está dormindo beleza só que isso aqui não configura como polimorfismo porque a basicamente
o método dormir né ele foi definido na em animal e tá encapsulado lá né e ele não é específico para cada uma das classes então vocês concordam que o pássaro dorme diferente de um é que um pássaro é um animal Mas nem todo animal dorme do mesmo jeito tá então o pássaro ele tem seu jeito de dormir e o papagaio também ele vai ter o seu jeito de dormir né vamos vamos imaginar aqui que o Louro José ele gosta de dormir de cabeça para baixo é o jeito dele tá então eh esse essa esse método
dormir ele vai ser implementado de forma diferente para cada Eh subclasse aí para cada eh classe específica que a gente tá estendendo de animal tá então o animal vai ter essa implementação de dormir e eu posso sobre escrever a implementação de dormir nessas outras classes então aqui em pássaro eu posso implementar aqui ó criar aqui a função dormir também e E aí eu vou estar sobrescrevendo né esse método dormir então quando eu criar uma Instância de pássaro o método dormir que vai ser usado vai ser esse que eu escrevi dentro da classe pássaro e não
o dormir que está definido aqui na classe animal tá ele vai sobrescrever para mim e também papagaio eu posso implementar aqui um método dormir então pra gente ver as diferenças eu vou chamar dormir aqui ou eu vou mudar o texto né então aqui não vai ser o animal vai ser o pássaro E aí o nome do pássaro está dormindo n aqui vai ser o Papagaio e aqui o nome do Papagaio está dormindo e o animal vai ficar né o animal está dormindo e agora quando como eu declarei eu sobr escrevi né o método dormir eh
quando eu executar isso aqui nós temos ó o animal Rex está dormindo o pássaro piupiu está dormindo e o louro o papagaio né Louro José está dormindo então com isso aqui agora sim nós conseguimos chegar no do que é o polimorfismo né Nós temos diferentes objetos que é animal pássaro e papagaio eles estão acessando o mesmo método só que esse mesmo método ele se comporta de forma diferente né ele tem suas ele tem a a a forma diferente né e basicamente a ideia por trás do polimorfismo é isso e só eh aprofundando mais aqui na
na sobrecarga eu posso ou para fazer a sobrecarga né o a subscrição do método eu tenho que Declarar no caso método com o mesmo nome né os parâmetros aqui eu posso receber parâmetros diferentes então o pássaro aqui ele vai receber um parâmetro que não pode ser qualquer coisa o teste e eu posso fazer o consol log do pássaro está dormindo e do teste aqui pra gente ver que eu posso fazer a implementação a sobrecarga né sobrescrever de uma forma diferente com parâmetros Diferentes né então aqui o dormir do pássaro vai receber um parâmetro o dormir
do Papagaio vai receber dois parâmetros então eu vou chamar de teste um e teste dois e eu vou fazer cons log disso aqui tudo pra gente conseguir enxergar isso aqui melhor né teste um e teste dois e aqui quando eu chamo dormir né do pássaro dormir do pássaro vai ter 1 2 3 o dormir do Papagaio vai ter 3 3 3 e 444 é qualquer coisa só pra gente vê de fato que eu consigo receber outros parâmetros e fazer o o o uso deles né no caso aqui eu vou fazer só o consol E aí
quando eu executo nós temos aí ó o animal Rex está dormindo o pássaro pioio está dormindo e ele fez o consol log do parâmetro diferente e o papagaio lour José está dormindo e temos aqui também os parâmetros diferentes tá então basicamente entre aspas né é isso eh de de início vai ser um pouco confuso mas eu acredito que ficou bem claro aqui pra gente o essas diferenças né entre a herança o polimorfismo E também o encapsulamento que o encapsulamento já fica bem claro né que nós temos de Fato e a gente tá sempre usando isso
né Nós temos eh métodos que fazem que tem a sua implementação que usam as suas variáveis né então eu eu tenho a ideia de encapsulamento Eu encapsulou também valores de variáveis então ao invés de criar um membro da classe que vai ser conseguir ser acessado eu basicamente eh uso variáveis dentro da implementação né crio minhas próprias variáveis dentro do corpo do método e essas variáveis elas ficam elas ficarão eh privadas ali para aquele método que está executando ele que isso Volta lá quando a gente estava explicando do contexto de execução das funções né das variáveis
globais e variáveis locais aqui também eh a gente usa isso para tá atingindo aí um certo nível de encapsulamento na hora de implementar as coisas tá certo então para essa aula é isso eu espero que eu tenha ajudado qualquer dúvida pode est deixando um comentário aí logo abaixo e é isso aí muito obrigado e até a próxima [Música]