Estou me sentindo muito burro quando cheguei nesses exercícios do curso 3. Minha lógica está horrível e não to conseguindo acompanhar, agora dificultou bastante. Eu leio e releio diversas vezes a resolução do exercício e não dá pra entender. )))):
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Estou me sentindo muito burro quando cheguei nesses exercícios do curso 3. Minha lógica está horrível e não to conseguindo acompanhar, agora dificultou bastante. Eu leio e releio diversas vezes a resolução do exercício e não dá pra entender. )))):
Oi, Lucas! Tudo bem?
Não se sinta mal por estar com dificuldades, isso é completamente normal quando estamos aprendendo algo novo, especialmente conceitos mais avançados como herança e polimorfismo em orientação a objetos, no meu primeiro contato com esses conceitos também senti bastante! Vou tentar te ajudar com um exemplo prático para esclarecer melhor esses conceitos.
Vamos pegar um dos exercícios como exemplo, o exercício 2, que envolve a criação de classes Animal, Cachorro e Gato:
1 . Crie a classe Animal:
emitirSom(). Aqui é como se fizéssemos um molde para todos os animais que vamos declarar (instanciar) no futuro, em que o método que declaramos, emitirSom(), nos informa uma ação comum aos animais, ou seja, os animais deverão emitir um som.public class Animal {
public void emitirSom() {
System.out.println("Animal faz um som");
}
}
2 . Crie a subclasse Cachorro:
Animal e sobrescreve o método emitirSom(), além disso, adiciona um método específico abanarRabo().public class Cachorro extends Animal {
@Override
public void emitirSom() {
System.out.println("Cachorro late");
}
public void abanarRabo() {
System.out.println("Cachorro está abanando o rabo");
}
}
Ou seja, a nossa classe chamada Animal funciona como um molde geral para todos os animais, e tem um método chamado emitirSom().
Quando criamos a classe Cachorro estamos criando uma classe específica para esse tipo de animal. Essa nova classe é como um molde específico baseado no molde geral de Animal. A classe Cachorro vai pegar tudo o que a classe Animal tem e usar, mas também vai mudar o método emitirSom() para fazer um som específico de cachorro, como um latido. Esse processo de mudança de um método é chamado de sobrescrever.
Além disso, a classe Cachorro pode ter coisas que são só de cachorros, como o método abanarRabo(), que descreve uma ação específica de cachorros abanarem o rabo. Então, enquanto todos os animais podem emitir um som, apenas os cachorros têm o método especial para abanar o rabo.
Essa é uma maneira de organizar as coisas, dizendo que todos os cachorros são animais, mas também têm características únicas.
3 . Crie a subclasse Gato:
Animal e sobrescreve o método emitirSom(), além de adicionar um método específico arranharMoveis().public class Gato extends Animal {
@Override
public void emitirSom() {
System.out.println("Gato mia");
}
public void arranharMoveis() {
System.out.println("Gato está arranhando os móveis");
}
}
4 . Teste as classes:
Cachorro e Gato.public class TesteAnimais {
public static void main(String[] args) {
Animal meuCachorro = new Cachorro();
Animal meuGato = new Gato();
meuCachorro.emitirSom(); // Deve imprimir "Cachorro late"
((Cachorro) meuCachorro).abanarRabo(); // Deve imprimir "Cachorro está abanando o rabo"
meuGato.emitirSom(); // Deve imprimir "Gato mia"
((Gato) meuGato).arranharMoveis(); // Deve imprimir "Gato está arranhando os móveis"
}
}
Cachorro e Gato herdam de Animal, o que significa que elas têm todos os métodos e atributos de Animal, além dos seus próprios métodos específicos.@Override para indicar que emitirSom() nas subclasses Cachorro e Gato está substituindo o método da classe Animal.main, usamos o polimorfismo ao declarar meuCachorro e meuGato como Animal, mas instanciá-los como Cachorro e Gato. Isso permite que a mesma referência (Animal) possa se comportar de diferentes maneiras (como Cachorro ou Gato).Espero ter ajudado! E lembre-se que caso surja qualquer dúvida, pode comentar aqui no fórum, nossa comunidade está aqui para ajudar, eu mesma estou disponível e ficarei super feliz em poder contribuir com o seu aprendizado, o processo é dificil mesmo mas com dedicação e apoio a gente consegue!
Um forte abraço e bons estudos!