C# 中的虚方法
多态的实现方法之一(虚方法,抽象类,接口)
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通的类,用虚方法来实现多态。
定义方法:
将父类的方法标记为虚方法,使用关键字virtual,标记后这个函数就可以被子类重新写一遍,在子类方法前加上override即可
class FClass
{
public FClass()
{
Console.WriteLine("父类的构造方法");
}
public virtual void show()
{
Console.WriteLine("父类的show方法");
}
}
class sonClass : FClass
{
public sonClass()
{
Console.WriteLine("子类构造方法");
}
//子类重写父类的show方法
// public override void show()
// {
// Console.WriteLine("子类的show方法");
// }
//
public void show()
{
Console.WriteLine("子类的show方法");
}
}
class Program
{
static void Main(string[] args)
{
//1.若子类重写父类的show方法
Fclass f = new sonClass();
f.show();
//输出 :父类的构造方法 子类的构造方法 子类的show方法
sonClass s = new sonClass();
s.show();
//输出:父类的构造方法 子类的构造方法 子类的构造方法
//2.若子类不重写,但有一个同名的show方法,会有警告,但可编译通过
Fclass f = new sonClass();
f.show();
//输出 :父类的构造方法 子类的构造方法 父类的show方法
sonClass s = new sonClass();
s.show();
//输出:父类的构造方法 子类的构造方法 子类的构造方法
}
}
总结:
1.子类重写父类的虚方法后,调用方法时直接调用子类的方法,父类变量存储的是哪个子类,就调用哪个子类的对应方法
2.子类不重写父类的虚方法,使用父类引用时,调用父类的方法,使用自己的引用时,调用自己的方法