[MÚSICA] Meu nome é Eduardo Guerra. Este é o curso de Orientação a Objetos com Java. Hoje vamos estar falando sobre classes abstratas, tá? Vamos entender como criar classes abstratas, entender o seu conceito e que situações elas podem ser aplicadas. Então, eu vou começar aqui fazendo pequeno exercício com vocês. Pensa carro! Vê aí o que vem na cabeça de vocês. Talvez alguma coisa mais ou menos assim. Agora imagina se eu chego para vocês e falo assim: Pensa veículo! Aí, você vai falar assim: espera aí, veículo! Tem avião, tem moto, tem carro, tem bicicleta, caminhão, tem barco, tem monte de coisas. Aí, você vai virar para mim e falar assim: espera aí, qual? Qual veículo que você quer que eu pense? Então, a gente vê que veículo é conceito, é uma abstração, mas por outro lado é uma abstração que ela é abstrata demais para eu pensar veículo. Para eu falar assim: " veículo", eu tenho que ter o veículo concreto. Eu tenho que ter uma coisa pouco menos abstrata. Então, existem alguns conceitos como esse que são muito abstratos para você ir lá e criar objeto. Daí imagina: " criei objeto aqui de veículo." Aí você vai dizer: "qual?" É a mesma pergunta lá que você se fez, né? Qual? Então, para esses conceitos que, às vezes, faz sentido você ter essa classificação, mas não faz muito sentido você ir lá e criar objeto daquela classe, a gente tem as classes chamadas de abstratas. Então, eu posso criar uma classe, eu coloco esse modificador abstract. E é uma classe que ela não vai poder ser instanciada. Ela vai ser uma classe que ela só pode ser utilizada para ser estendida por outras classes, então eu posso ter, por exemplo, uma classe carro que estende o veículo. Olha aí, agora eu posso ter o veículo. Agora que eu tenho uma coisa pouco mais concreta, eu posso ter o veículo. Agora eu não posso fazer Veiculo = new Veiculo, porque uma classe abstrata ela não pode ser instanciada. Por quê? Não faz sentido eu falar veículo sem ele ser alguma coisa. Então, por isso que é conceito que ele só pode ser, digamos assim, instanciado através de uma subclasse. Uma classe abstrata ela também pode ter métodos abstratos. Ou seja, eu posso falar assim: olha todo veículo ele tem uma posição e ele pode se mover. Agora, como que ele faz isso, eu não sei. Então, uma classe abstrata ela pode ter métodos abstratos, que ela define método. Ou seja, olha, todo veículo sabe fazer isso aqui, mas cada faz de jeito diferente. Mais ou menos, isso que é o significado de método abstrato. Ela falar que todos sabem fazer aquilo mas ela não sabe como eles fazem. Então, é mais ou menos como método que você deixa para que as subclasses implementem, né? E por isso mesmo que não faz sentido você ter uma classe abstrata sendo instanciada, porque ela pode ter métodos que não têm definição ainda, que vão ser definidos só uma subclasse. Então, para que que serve isso? Essas classes abstratas, elas podem definir contrato, ou seja, olha o veículo ele vai ter lá aqueles métodos abstratos e quais as funcionalidades comuns que aquele grupo de classes vai ter. Uma classe abstrata, ela pode ter métodos abstratos mas ela pode ter métodos normais também, ela pode ter atributos. Ela pode ter tudo que uma classe tem. Só que, primeiro, ela não pode ser instanciada, e segundo, pode ter métodos abstratos, que ela define só a assinatura do método e deixa a implementação dele para a subclasse. Então, eu espero que com isso você tenha entendido o que é uma classe abstrata, né? É uma classe feita para outras classes estenderem aquele conceito, mas ela si já consegue determinar certo protocolo, certo contrato para as classes que vão estender ela. E não pode ser instanciada por ser conceito muito abstrato ainda. Tá certo? Muito obrigado por assistir e até a próxima aula! [MÚSICA]