[MÚSICA] [MÚSICA] Meu nome é Eduardo Guerra. Esse é o Curso de Programação Orientada a Objetos com Java. Hoje vamos falar sobre herança. O objetivo dessa aula é que você saia entendendo o que é herança e como utilizar ela na modelagem orientada a objetos. Adicionalmente vamos ver também como implementar essa herança aà Java. A gente viu no final da outra aula, a questão dos nÃveis de abstração e vimos que a partir da herança, a gente consegue estar estendendo conceito de uma classe para tornar ele mais especÃfico. Então, quando isso acontece, a gente chama a classe a qual está sendo estendida de superclasse e a classe que está estendendo de subclasse, então no nosso exemplo, o empregado que seria a classe base, ele seria a superclasse, e o gerente que seria a classe que está especializando seria a subclasse, como é que a gente faz isso? Por exemplo, Java eu simplesmente uso o extends, então eu coloco que gerente extends empregado, e a partir dali ele vai herdar todos os métodos e atributos da classe de cima. Note que eu posso por exemplo, adicionar, então no momento que eu faço gerente extends empregado, ele vai herdar ali todos aquele atributos e aà eu ainda posso acrescentar o bônus que é especÃfico do gerente. Quando eu faço a herança, têm coisas que pode e têm coisas que não pode, então o que é que pode? Eu posso estar adicionando métodos, eu posso estar adicionando atributos e eu posso estar modificando métodos. Essa questão da modificação de métodos a gente vai ver com mais detalhes numa aula para frente. Agora o que é que não pode? Eu não posso remover nada, então aquilo que a classe, que a superclasse falou que tem termos de métodos e atributos, eu não posso tirar, eu não posso remover. E outra coisa que eu não posso fazer, é estender uma outra classe, Java eu só posso estender uma classe por vez, a gente também nessa aula vai ver isso pouquinho mais pra frente. Agora porque é que eu não posso remover? Quando uma classe ela chega e fala: "olha eu tenho esse método e eu tenho esse atributo e você pode acessar ele", é como se ela tivesse criando contrato, que ela se compromete a prover aquelas informações e aquela funcionalidade. Se você for lá e remover método na subclasse, é como se você tivesse rescindido aquele contrato. Ou seja, por exemplo, empregado ele vai lá e fala o seguinte: "olha a partir de mim você consegue obter o meu salário, a partir de método". e o gerente, ele tem que continuar, como ele é empregado, como ele está estendendo esse conceito, ele pode acrescentar coisas novas, ele pode acrescentar métodos, ele pode até pegar método que existe e implementar ele de uma forma diferente, ter uma lógica diferente. Mas ele não pode, de forma nenhuma, quebrar aquele contrato da superclasse. Isso na modelagem orientada a objetos é extremamente importante, a subclasse, ela tem que manter os contratos da superclasse, então se a superclasse fala que pode prover uma informação, a subclasse tem que continuar provendo aquela informação. Se a superclasse diz que vai fornecer uma funcionalidade a partir de método, a subclasse tem que continuar provendo aquela funcionalidade, pode ser até de uma forma diferente, mas ela não pode quebrar o contrato. Outra coisa se a gente for pensar por exemplo, esse seria o exemplo clássico do que a gente chama aà de herança múltipla, se eu tenho sofá cama, ele herdaria conceitos tanto de cama, quanto de sofá. Então a gente pode falar assim, não, no caso ali eu tinha empregado, e tenho gerente que é empregado mais especÃfico, eu posso falar que o sofá cama é sofá mais especÃfico, ou posso falar que o sofá cama, é uma cama mais especÃfica, eu posso falar que sofá cama, é ao mesmo tempo, sofá e uma cama mais especÃfica. Só que, Java, essa ideia da herança múltipla, ela não é permitida na linguagem. Então essa também é uma coisa que a gente tem que lembrar, que é uma limitação da herança na linguagem Java. Você só pode usar herança uma vez por classe, então a partir do momento que uma classe estende uma outra, você não pode ir lá e fazer uma outra herança. Eu gosto de dizer que a herança é aquela carta que você só joga uma vez, então a partir do momento que você deu aquela cartada e que você está usando a herança, que você usou esse recurso uma classe, você não vai poder usar de novo para a mesma classe. Então por isso é que a gente tem que pensar nossas hierarquias muito bem na hora que estamos fazendo a modelagem, porque se a gente começar a usar herança de forma errada, a gente pode precisar da herança mesmo e não poder usar, porque aquele relacionamento já existe com uma outra classe. Com certeza no curso como todo, vamos falar muito mais sobre essas situações aÃ, e sobre os cenários que é adequado estar utilizando a herança. Para fechar essa aula de herança, a ultima coisa que eu queria falar para vocês, é que mesmo que você não coloque extends, toda classe, ela vai estender a classe object, que seria aà digamos assim o pai de todas as classes, aquela classe que todas as classes estendem ela, não é? Eu lembro que tinha colega meu, que ele falava que, na empresa dele, o presidente da empresa, o pessoal chamava ele de object, porquê? Porque é aquele cara que está no topo da hierarquia da empresa. Então Isso aà é para vocês não esquecerem que o object é aquela classe que está no topo da hierarquia das classes Java. Toda a classe é object, mesmo que você não coloque explicitamente extends object, na verdade a gente não faz isso, a gente não colocando nada a classe vai estar estendendo diretamente de object. O object tem alguns métodos, como o método equals, para comparação, que a gente pode sobescrever e que tem algumas outras classes que utilizam esses recursos aÃ. Então é importante saber que mesmo que você explicitamente não esteja usando herança, implicitamente a sua classe está estendendo sempre uma outra classe, que no caso, se você não especificar nenhuma, vai ser a classe object. Então eu espero que com essa aula, todos vocês tenham entendido melhor esse conceito de herança, e visto como Java a gente utiliza ali o extends, para poder estender ali e herdar os métodos e atributos de uma outra classe. Muito obrigado. Até à próxima aula, que vamos entrar com mais detalhes nessa parte da herança. [MÚSICA]