关于C#中的abstract与virtual的用法一直迷糊。于是自己动手写一写试试。
1.第一种情况
4 |
public abstract void Shout();
|
08 |
public override void Shout()
|
10 |
Console.WriteLine( "喵喵!" );
|
08 |
public override void Shout()
|
10 |
Console.WriteLine( "汪汪!" );
|
2 |
static void Main( string [] args)
|
4 |
Animal cat = new Cat();
|
6 |
Animal dog = new Dog();
|
运行结果如下:
2.第二种情况
如果用virtual,Animal类则修改如下,注意虚方法要有方法体。
3 |
public virtual void Shout()
|
5 |
Console.WriteLine( "动物叫!" );
|
运行结果依旧:
在第一种情况下,由于子类必须要实现基类的抽象方法,所以如果把Cat类的Shout()方法去掉,程序编译会报错。
但是在第二种情况下,如果把Cat类的Shout()方法去掉,则客户端没有覆盖基类的Shout()方法,cat.Shout()会调用基类的Shou()方法。运行结果如下:
|
请发表评论