多态的作用就是把不同的子类都当作父类来看,通过继承实现不同的不同对象相同方法,表现出不同的行为,写出通用的代码,做出通用的编程,以适应需求的不断变化。
1. 虚方法实现多态
2.抽象方法实现多态
3.接口实现多态
虚方法实现的多态:
在c#中用virtual来定义虚方法,虚方法仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数。虚方法必须有实现的部分,派生类可以去覆盖也可以不覆盖。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//鸟的父类、基类
public class Bird
{
public virtual void Eat()
{
Debug.Log("吃");
}
public virtual void Sleep()
{
Debug.Log("睡");
}
}
//麻雀 继承Bird
public class sparrow:Bird
{
public override void Eat()
{
Debug.Log("麻雀吃稻谷");
// base.Eat(); 不执行父类中的原有方法
}
public override void Sleep()
{
Debug.Log("麻雀睡在屋檐下");
// base.Sleep();
}
}
public class eagle : Bird
{
public override void Eat()
{
Debug.Log("老鹰吃肉");
// base.Eat();
}
public override void Sleep()
{
Debug.Log("老鹰睡山崖");
// base.Sleep();
}
}
public class DT : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Bird[] birds =
{
new Bird(),
new eagle(),
new sparrow ()
};
foreach (var item in birds)
{
item.Eat();
item.Sleep();
}
}
// Update is called once per frame
void Update()
{
}
}
运行结果如下:
Q.png
抽象方法
在c#中使用关键字abstract来定义抽象类和抽象方法,不能初始化的类教抽象类,它们只提供部分实现功能,但是另一个类可以继承他并且能创建他们的实例
抽象类能够被用于类、方法、属性、索引器和事件,使用abstract声明的抽象方法只能在抽象类中,抽象方法只有声明,没有实现代码,需要在派生类中实现。
修改Bird 基类,将其改成抽象类:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//鸟的父类、基类
public abstract class Bird
{
public abstract void Eat();
public abstract void Sleep();
}
//麻雀 继承Bird
public class sparrow : Bird
{
public override void Eat()
{
Debug.Log("麻雀吃稻谷");
// base.Eat(); 不执行父类中的原有方法
}
public override void Sleep()
{
Debug.Log("麻雀睡在屋檐下");
// base.Sleep();
}
}
public class eagle : Bird
{
public override void Eat()
{
Debug.Log("老鹰吃肉");
// base.Eat();
}
public override void Sleep()
{
Debug.Log("老鹰睡山崖");
// base.Sleep();
}
}
public class NewBehaviourScript : MonoBehaviour
{
void Start()
{
Bird[] birds =
{
new eagle(),
new sparrow ()
};
foreach (var item in birds)
{
item.Eat();
item.Sleep();
}
}
// Update is called once per frame
void Update()
{
}
}
抽象方法截图.png
由此可见,选择使用抽象方法还是使用虚方法来实现多态,就是要不要使用基类来实例化对象的区别。
接口方法 。待补充










网友评论