多态就是让一个对象能够表现出多种状态,实现多态有三种方法:
1、虚方法
在父类的方法名前加上关键字 virtual 标记为虚方法,表示这个方法可以被子类重写,子类重写父类的方法时需要在方法名前加上关键字 override。
class Polymorphism多态
{
static void Main()
{
Cat cat = new Cat("花花");
Dog dog = new Dog("点点");
Animal[] animal = { cat, dog };
for(int i = 0; i < animal.Length; i++)
{
animal[i].Introduce();
}
Console.ReadKey();
}
}
public class Animal
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Animal(string name)
{
this.Name = name;
}
public virtual void Introduce()
{
Console.WriteLine("我是小动物");
}
}
public class Cat: Animal
{
public Cat(string name):base(name)
{
}
public override void Introduce()
{
Console.WriteLine("我是小猫,我叫{0}", this.Name);
}
}
public class Dog : Animal
{
public Dog(string name) : base(name)
{
}
public override void Introduce()
{
Console.WriteLine("我是小狗,我叫{0}", this.Name);
}
}
2、抽象类
在父类的前面加关键字 abstract ,父类方法前面也加上 abstract ,这时子类可以重写父类方法,在子类方法名前加关键字 override。
抽象类特点:
1、抽象类所包含的抽象成员不能有任何实现(函数体);
2、抽象类不能被实例化;
3、抽象成员只能被包含到抽象类中。
class Polymorphism多态
{
static void Main()
{
//Animal animal = new Dog();
Animal animal = new Cat();
animal.Vocalization();
Console.ReadKey();
}
}
public abstract class Animal
{
public abstract void Vocalization();
}
public class Cat: Animal
{
public override void Vocalization()
{
Console.WriteLine("我是小猫,我喵喵叫");
}
}
public class Dog : Animal
{
public override void Vocalization()
{
Console.WriteLine("我是小狗,我汪汪叫");
}
}
3、接口
接口用 interface 关键字修饰。
接口特点(适用于 8.0 之前的版本):
1、 接口所包含的成员不允许添加访问修饰符,默认为 public;
2、接口中不允许写含有方法体的函数;
3、一个类继承了接口,就必须实现这个接口中所有的成员。
public interface IPlayAbled
{
void Play();
}
public class Worker: IPlayAbled
{
public void Play()
{
Console.WriteLine("我会玩游戏");
}
}