Herança é um conceito central na POO (Programação Orientada a Objetos). Ela representa uma relação É-UM. Na programação, significa literalmente o mesmo que em inglês: herdar características da classe pai (na programação, essas características geralmente são funções e variáveis).
Considere uma classe Animal, como mostrado a seguir:
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Animal é uma classe pai, porque as propriedades dessa classe podem ser estendidas a todos os animais em geral.
Considere um animal chamado Lion, com uma classe como esta:
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
A anotação Override é usada para indicar que um método em uma subclasse está sobrescrevendo um método da sua superclasse.
Ela não é estritamente necessária, mas usá-la é uma boa prática.
Agora, sempre que fizermos:
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
Repare: estamos inicializando a classe Animal com Lion.
A saída será assim:
Lion here!!
De acordo com a POO, existem muitos tipos de herança, mas o Java suporta apenas alguns deles (multinível e hierárquica). Para saber mais, leia este artigo.
Neste exercício, você está jogando um jogo de RPG em que diferentes tipos de lutadores podem combater uns aos outros. O jogo tem regras diferentes para cada tipo de lutador. Vamos nos concentrar em dois tipos específicos: Magos e Guerreiros.
Para um Guerreiro, as regras são estas:
6 pontos de dano se o lutador que ele está atacando não for vulnerável.10 pontos de dano se o lutador que ele está atacando for vulnerável.Para um Mago, as regras são estas:
12 pontos de dano se tiver preparado uma magia com antecedência.3 pontos de dano se não tiver preparado uma magia com antecedência.Crie uma nova classe chamada Warrior.
Essa classe deve herdar da classe Fighter existente.
Atualize a classe Warrior para que seu método toString() descreva que tipo de lutador ele é.
O método deve retornar a string "Fighter is a Warrior".
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Atualize a classe Warrior para que seu método isVulnerable() sempre retorne false.
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Atualize a classe Warrior para que seu método getDamagePoints(Fighter) calcule o dano causado por um Guerreiro de acordo com as regras acima.
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Crie outra nova classe chamada Wizard.
Essa classe também deve herdar da classe Fighter existente.
Atualize a classe Wizard para que seu método toString() descreva que tipo de lutador ele é.
O método deve retornar a string "Fighter is a Wizard".
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Atualize a classe Wizard para adicionar um método chamado prepareSpell().
A classe deve se lembrar de quando esse método é chamado e garantir que seu método isVulnerable() retorne false apenas quando uma magia estiver preparada.
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Atualize a classe Wizard para que seu método getDamagePoints(Fighter) calcule o dano causado por um Mago de acordo com as regras acima.
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.