37 - Considera a seguinte classe:
public abstract class NPC
{
public float HP { get; protected set; }
public NPC(float hp)
{
HP = hp;
}
public void PlayTurn()
{
if (FindEnemies())
{
AttackEnemies();
}
if (FindFood())
{
EatFood();
}
Move();
}
protected abstract bool FindFood();
protected abstract bool FindEnemies();
protected abstract void EatFood();
protected abstract void AttackEnemies();
protected virtual void Move()
{
Console.WriteLine(this.GetType() + " has moved!");
}
}
Responde às seguintes questões:
- É possível instanciar esta classe? Porquê?
- É possível estender esta classe? Porquê?
- Que métodos desta classe podem ser sobrepostos (overridden)? Porquê?
- Que métodos desta classe não podem ser sobrepostos (overridden)? Porquê?
Este exercício continua no problema 8 de UML e design de classes.
- Não é possível instanciar a classe
NPC
pois é uma classe abstrata, apenas uma subclasse não-abstrata desta poderá ser instanciada. - É possível estender esta classe, pois a mesma não possui a keyword
sealed
. - Estes métodos da classe podem ser sobrepostos, devido a possuírem uma das
duas keywords
abstract
ouvirtual
:FindFood()
;FindEnemies()
;EatFood()
;AttackEnemies()
;Move()
.
- Estes métodos da classe não podem ser sobrepostos pois nenhum deles
possui uma das duas keywords
abstract
ouvirtual
:PlayTurn()
.
Nota: Código de teste para este exercício encontra-se neste repositório.
Por Pedro Inácio.