多态分为编译时多态和运行时多态。
编译时多态就是函数重载和运算符重载。
运行时多态就是通过虚函数实现的
多态的目的:让同一对象在执行相同行为有不同表现。
解决的物体:让同一对象有同一的行为特征。
例子:
class Father
{
public string name;
public Father(string name)
{
this.name = name;
}
public virtual void Speak()
{
Console.WriteLine("{0}玩家攻击",name);
}
}
class Son : Father
{
public Son(string name):base(name)
{
}
public override void Speak()
{
//可以选择保留父类的方法
//base.Speak();
Console.WriteLine("儿子玩家攻击");
}
}
class Person
{
static void Main(string[] args)
{
Father fa = new Son("父亲");
fa.Speak();
Console.ReadKey();
}
}
抽象类
使用abstract关键字修饰的类,不能被实例化,可以有抽象方法。
什么样的类修饰为抽象类呢?该类为某一事物的统称,比如:水果,人,蔬菜,水果实际上是不存在的,由苹果、香蕉等多种组成。
抽象方法
特点:1.该类必须声明为抽象类
2.没有方法体的纯虚方法
3.子类必须重写该方法,通过override
4.修饰为public
例子:
abstract class Fruit
{
public abstract void buy();
}
class Apple : Fruit
{
public override void buy()
{
Console.WriteLine("当前为苹果");
}
}
class Person
{
static void Main(string[] args)
{
Fruit fruit = new Apple();
if (fruit is Apple)
(fruit as Apple).buy();
Console.ReadKey();
}
}