之前文章有写过相同的内容,但是顺序和内容安排不一样,学术性的描述在此就不再写一遍了,写的都是具体如何操作的方法,和例子
实现多态的3种方法
- 虚方法
- 抽象类
- 接口(后面再补充)
虚方法构成重写
关键词:virtual和override
下列例子同样用方法Run,但引用Vehicle和引用Car两种实例的时候,打印出来的语句是不一样的。也就是说,用不同类型实例调用方法的时候,与实例相关联的版本就会被调用,是父类的Run被重写了
static void Main(string[] args)
{
var car = new Car();
car.Run();
var v = new Vehicle();
v.Run();
}
class Vehicle
{
public virtual void Run()//方法这里要添加virtual
{
Console.WriteLine("I'm running");
}
}
class Car:Vehicle
{
public override void Run()//这里添加override才能构成重写
{
Console.WriteLine("Car is running");
}
}
抽象类
我们平时说类的时候,都是默认的具体类,如果是抽象类一定会特地的说出来。要创建抽象类,一定要加abstract指出来,未被实现的成员,也要用abstract来修饰,而且他们不能是private。 因为,一定是抽象类的子类来去实现它。
抽象类的写法:(因为我创了一个动物类的叫声,但是“动物”不知道怎么叫,只能知道他们具体类,比如鸡叫,狗叫,猫叫)
public abstract class Animal//抽象类
{
public abstract void Bark();//没有方法体的抽象方法
}
要注意的是
- 不允许去实例化一个抽象类,它只可以作为基类把自己派生出去,或者声明变量,利用多态。用父类的变量实现子类的实例。