虚方法实际上是多态的实现形式之一(虚方法、抽象方法、接口)
如果在父类中标记了虚方法
- 如果子类没有重写虚方法,那么里氏转换的所调用的方法是父类自己的方法
- 如果子类重写了虚方法,那么里氏转换所调用的方法就是子类的方法,但是子类中没有重写虚方法的那些方法仍然无法调用
- 虚方法必须要有方法体,方法体内可以写业务逻辑,因为子类不重写,它就是调的父类的这个虚方法。
语法
访问修饰符 virtual 返回值 函数名()
{
}
class Program
{
static void Main(string[] args)
{
Person p = new Student();
p.SayPerson();
Person p1 = new Teacher();
p1.SayPerson();
Console.ReadKey();
}
}
public class Person
{
public virtual void SayPerson()
{
Console.WriteLine("我是Person类方法");
}
}
public class Student:Person
{
public override void SayPerson()
{
Console.WriteLine("我是Student类重写父类的方法");
}
public void SayStudent()
{
Console.WriteLine("我是Student类方法");
}
}
public class Teacher : Person
{
public override void SayPerson()
{
Console.WriteLine("我是Teacher类重写父类的方法");
}
public void SayTeacher()
{
Console.WriteLine("我是Person类方法");
}
}
网友评论