英雄联盟里每个英雄有四个技能:
public interface IHero
{
void SkillQ();
void SkillW();
void SkillE();
void SkillR();
}
然后每个英雄的技能有不同的名称,如盖伦和拉克丝,这两个英雄就能继承自英雄接口:
public class Garen : IHero
{
public void SkillE()
{
Debug.Log("Judgment");
}
public void SkillQ()
{
Debug.Log("Decisive Strike");
}
public void SkillR()
{
Debug.Log("Demacian Justice");
}
public void SkillW()
{
Debug.Log("Courage");
}
}
public class Lux : IHero
{
public void SkillE()
{
Debug.Log("Lucent Singularity");
}
public void SkillQ()
{
Debug.Log("Light Binding");
}
public void SkillR()
{
Debug.Log("Prismatic Barrier");
}
public void SkillW()
{
Debug.Log("Final Spark");
}
这时我们生成一个英雄就可以直接声明接口然后实例化具体的英雄:
void Start()
{
IHero myHero = new Garen(); //接口声明,类实例化
myHero.SkillQ();
}
嘿嘿嘿,盖伦来砍人,沉默了。
但是接口呢,是不能含有具体字段的,那比如说英雄有一些共有的属性比如血量蓝条等,就可以用英雄基类来实现:
public class BaseHero : IHero
{
public int hp = 100;
public virtual void SkillE()
{
Debug.Log("E");
}
public virtual void SkillQ()
{
Debug.Log("Q");
}
public virtual void SkillR()
{
Debug.Log("R");
}
public virtual void SkillW()
{
Debug.Log("W");
}
}
发现这时我们的成员函数都变成virtual了,变成virtual后我们子类对象能够override父类对象,同时父类对象也能输出。如果我们不使用virtual,就必须在子类对象里使用new,但是会遮盖父类对象。
这时我们的main函数为
BaseHero myHero = new Garen(); //接口声明,类实例化
myHero.SkillQ();
Debug.Log(myHero.hp);
盖哥还是强的啊。