interface IAttack<T> { T GetAttack();}
interface IUpgradableAttack<T> : IAttack<T>{ int level {get; set;} T GetAttack(int level);}
GetAttack(){GetAttack(level)}
IAttack
IUpgradableAttack