[MÚSICA] Bem vindos a mais "hands on" do nosso curso de Orientação a Objetos com Java. Hoje vou mostrar aqui exemplo simples de herança, para a gente entender direitinho na prática, como que se faz uma herança, tá? No nosso exemplo a gente vai criar uma classe conta corrente, e depois vamos criar uma conta especial, que ela tem aí a questão do limite, então, vamos lá! Vou vir aqui no meu, vou criar novo projeto Java, certo? Vou chamar ele de Banco. [SEM ÁUDIO] Vou a princípio criar aqui a minha classe, conta corrente, certo? Então vou chamar aqui de Conta Corrente, certo? Essa classe aqui, ela vai ter saldo, certo? E ela vai ter aqui método sacar, certo? Que ele vai tirar do saldo e vamos ter método aqui, depositar, certo? Que ele vai adicionar no saldo, tá? Então o método depositar aqui, ele é bem tranquilo, porque a gente consegue o, é só a gente somar, não tem nenhuma restrição. Saldo, ele é mais igual ao valor, a gente somou ali, tá? O sacar a gente tem que ver se o valor é maior que o saldo, a princípio a conta corrente, a gente não pode deixar ela ficar negativa, então, eu vou verificar aqui primeiro, se o valor for maior, aí eu vou fazer o seguinte, para saber se sacou ou não, eu vou retornar ali inteiro com o valor do saque, tá? Então se o valor for maior que o saldo, eu vou retornar 0, ou seja, você não conseguiu sacar nada, tá? Senão, certo? Vou até colocar aqui as coisinhas aqui para ficar mais direitinho, não é? Então se o valor for maior que o saldo, ele não saca nada, senão ele vai retirar o valor do saldo, então saldo menos igual ao valor, certo? E aí ele vai dar o return valor, certo? Bom então essa aqui é a minha conta corrente, tá? Vamos criar testezinho dela aqui, só para a gente ver se está funcionando direitinho? Então TesteContaCorrente, vamos acostumando aí a fazer bastante teste, hein, gente, tá? Por isso que a gente viu isso no começo e está a cada exercício exercitando aqui os testes. Então vamos colocar aqui, depósito, eu vou criar aqui ContaCorrente new ContaCorrente, certo? E aqui eu vou fazer o depositar, vou depositar 200, certo? Seria interessante eu poder ver o saldo, não é? Tá? Vou criar métodozinho ali, não, a princípio deixa, vamos acessar direto aqui, para a gente focar na questão da herança, certo? Então eu vou ver aqui, se a minha conta corrente, se o saldo dela, está realmente 200, então vou fazer aqui, assert Equals cc. saldo, tem que ser 200. Vamos rodar aqui nosso teste, para ver se está certinho. JUnit teste. Ok, funcionou, tá? Vamos fazer mais outros dois testes aqui, que é o teste do saque, certo? Então eu depositei 200 e vou sacar 100, então vou criar aqui, int valor Sacado, certo? Então o meu saldo tem que ser 100 e o meu valor sacado, qual o problema aqui do saque, que ele está reclamando? Saque não está definido? É sacar, certo? E o saldo tem que ser 100, vamos fazer valor diferente, só para não ficarem os dois iguais, vou sacar 50, então meu saldo tem que ser 150 e assertEquals, o meu valor sacado ali, ele tem que ser 50, certo? Então vamos ver aqui se o saque acontece perfeitamente. Ok. E o nosso último teste aqui vai ser eu tentar sacar valor maior do que o meu saldo, então vou chamar o teste aqui de saqueMaior QueSaldo. Então eu vou tentar sacar 250, o meu saldo, ele tem que continuar 200, e o meu valor sacado agora tem que ser 0, certo? Então vou rodar aqui novamente os testes e agora, tudo rodando, tá? Então essa daqui é a primeira parte do nosso exemplo, tá? Na segunda parte a gente vai estar criando a classe conta especial, que essa classe tem limite de saque, tá? Então vamos lá. Eu vou vir aqui, vou criar uma nova classe, certo? Eu vou chamar ela de ContaEspecial, certo? E aí eu vou colocar aqui, extends ContaCorrente. Então a partir desse momento ele tem tudo ali que a conta corrente tem, certo? Que que eu tenho que fazer? A diferença é que a minha conta especial, ela tem limite, certo? Que é o quanto eu posso ir negativo, certo? Então vou fazer o seguinte, eu vou criar aqui construtor, quando estou criando a conta especial, ContaEspecial, eu preciso estar passando qual que é o limite, não é? Então vou colocar aqui, this.limite é igual a limite, pronto. Que que vai ser diferente? Eu não vou ter nenhuma diferença no método depositar e no método sacar o valor, ele tem que ser maior que o saldo, mais o limite, certo? Então vamos lá. Eu vou vir aqui, eu posso sobrescrever método que já existe na subclasse, tá? E vou estar colocando aqui, que ele tem que ser maior do que o saldo, mais o limite, certo? E vou salvar aqui, tá? Então eu tenho aqui meus testes de conta corrente, tá? Eu vou até fazer o seguinte aqui, eu vou usar o método Before, certo? Para eu fazer assim, public void inicializa Conta, certo? E aí eu vou fazer isso aqui, eu vou copiar esse aqui para cá, deixa eu só importar o Before aqui antes, vamos lá, importa o before, pega esse aqui Passa pra cá, eu tenho ali a minha ContaCorrente. Antes de cada teste ele vai criar nova ContaCorrente e aí eu posso tirar essa primeira linha aqui de tudo. Eu poderia até, por exemplo, esse depositar aqui que tá igual, eu posso até já criar a minha conta corrente com o depósito. Então já vou adiantar isso daqui. Certo? Excelente. O que eu vou fazer? Eu vou criar o meu teste da conta especial, certo? Então vou criar aqui JUnit test case. Eu vou criar aqui o meu Teste ContaEspecial e aí o que eu vou fazer vai ser sobreescrever este... então, o teste é uma classe também, eu também posso estar inicializando ele. Então ó, vez de eu criar uma ContaCorrente, eu vou criar uma ContaEspecial. Essa conta, ela vai ter aqui 100 de limite. No caso aqui, ele não está aceitando por ser... é... Cadê? Tá, faltou o extends TesteContaCorrente, certo? Vou salvar aqui... Certo? Então, o que vai acontecer? Estes testes aqui ó. Quando eu rodar aqui, vamos ver aqui, ó. Ele vai rodar todos os testes que tinham lá. Só que esse teste MaiorQueSaldo aqui não se aplica lá. Certo? Então, como que é o teste maior que saldo? Eu vou colocar aqui, ó. Esse teste aqui eu vou mandar ele sacar 350. Aí sim eu posso fazer com que ele passe ali, porque aí ele tá, opa, qual foi o problema aqui? Ele, tá! O saldo tem que continuar 200, porque ele tem 200 na conta. O meu teste que estava errado, tá? Vou rodar aqui... Agora funcionou e aí eu tenho que fazer o teste do limite. Então ó, eu vou ver aqui, se eu sacar por exemplo, 250, o meu saldo vai estar menos 50, porque eu tenho limite, e o valor vai estar limite. Então eu vou chamar esse cara aqui de MaiorQueSaldoDentroDoLimite. Certo? Então eu vou rodar, note que eu preciso, pra essa subclasse aqui, teste a mais. Mas observe que mesmo assim ele vai rodar os testes que estavam lá na superclasse. Então, ó, se eu vier aqui no projeto e mandar rodar ele com o JUnit, ele vai rodar pra mim todas as classes de teste, que são os quatro testes da conta especial mais os três testes da conta corrente. Então eu espero que com isso daí a gente tenha visto na prática pouco essa questão da herança, visto como que uma classe que estende a outra pode adicionar informações, pode sobrescrever os métodos da classe de cima. Tá certo? Espero que tenham compreendido. Muito obrigado, até a próxima aula. [Música]