C#中抽象⽅法与虚⽅法的区别描述⼀、抽象⽅法:只在抽象类中定义,⽅法修饰符不能使⽤private,virtual,static
抽象⽅法代码如下:
public abstract class People //声明⼀个抽象类
{
public abstract void study();//抽象⽅法只能定义在抽象类中。
}
public class Student : People //继承抽象类
{
public override void study()//重写抽象类的抽象⽅法
{
Console.WriteLine("好好学习,天天向上!");
}
}
public class Program
抽象类的使用{
static void Main(string[] args)
{
Student t =new Student();//实例化派⽣类
People p = t;//使⽤派⽣类对象实例化抽象类
//以上两句等价于 People p = new Student();//使⽤派⽣类对象实例化抽象类;
p.study();//使⽤抽象类对象调⽤抽象类中的抽象⽅法study
}
}
总结:
1.象⽅法只能声明在抽象类中,使⽤关键字abstract
2.抽象类中的抽象⽅法必须被⼦类重写
抽象⽅法没有⽅法体,⼦类必须重写⽅法体!!,因此抽象⽅法可以看成是⼀个没有⽅法体的虚⽅法⼆、虚⽅法:使⽤virtual修饰的⽅法:
虚⽅法可以有⽅法体。具体⽰例如下:
public class BaseClass //创建⼀个基类
{
public virtual string GetName()//使⽤virtual关键字创建⽗类中的虚⽅法
{
return"⽗类虚⽅法体";
}
}
public class SubClass : BaseClass //⼦类继承⽗类
{
public override string GetName()//⼦类重写⽗类虚⽅法
{
return"重写⽗类虚⽅法!";
}
}
以上的⽰例:⽗类中的虚⽅法被派⽣类重写了。
注意事项:virtual修饰符不能与private、static、abstract、override修饰符同时使⽤。
ps:override修饰符不能与new 、static、virtual修饰符同时使⽤,并且重写⽅法只能⽤于重写基类中的虚⽅法。
虚函数的限制:
1.虚函数仅适⽤于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数;
2.静态成员函数、内联函数、构造函数不能是虚函数;
3.析构函数可以是虚函数。
三、两者区别:
总结:
抽象⽅法是只有⽅法名称,没有⽅法体(也就是没有⽅法具体实现),⼦类必须重写⽗类抽象⽅法。
虚函数是该⽅法有⽅法体,但是⼦类可以覆盖,也可不覆盖。
1.虚⽅法有⽅法体,抽象⽅法没有⽅法体。抽象⽅法是⼀种强制派⽣类覆盖的⽅法,否则派⽣类将不能被实例化。
2.抽象⽅法只能在抽象类中声明,虚⽅法不是。
3.派⽣类必须重写抽象类中的抽象⽅法,虚⽅法则不必要。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论