C#:简述虚方法和抽象类方法其子类的重写同异点
在讲解标题内容之前先简单分析虚方法和抽象类的定义
虚方法(virtual)是有方法体的,它是一个完整的函数,可实现输入,什么时候需要附加virtual来修饰一个方法(在其子类需要使用同种方法即数据类型和返回类型都相同)
如大多入门书籍中介绍的一段代码
namespace virtual
{
public class Elanguage //此处没有其他意思,假设目前通用语言为英语,所以作为父类
{
public virtual void Say()
{
Console.WriteLine("Hello World!");
}
}
public class Clanguage : Elanguage
{
public override void Say()
{
base.Say();
Console.WriteLine("你好,世界!");
}
}
class Program
{
static void Main(string[] args)
{
Clanguage cl = new Clanguage();
cl.Say();
Console.ReadKey();
}
}
然后输出的界面呢这边就不加以运行了,大多书籍中都有这个实例,主要是理解虚方法的作用和使用情况。这边着重介绍的还是抽象类,如同其名字一样概念也稍微抽象。
抽象类使用情况:
抽象类的意义可以算是夹在接口和类之间。
1:假设需要一个接口来实现某些方法和属性,但是需要在接口中包含一些代码,使得派生类中不需要重复的实现某些方法,对于这种情况,我们所需要的就不是一个接口而已了,这个时候就需要使用抽象类。
2:举例如猫叫,狗叫,羊叫,驴叫,这些子类可以归给一个基类动物,但是在动物基类中是无法具体说明动物怎么叫的,此时就区别于虚方法。要使用抽象类在animal 中些一个方法public abstract void bark(); 不需要书写方法体。
抽象类不仅可以获得接口的一些特性,同时还可以像正常类一样在其中编写代码,
所以
- 抽象类需要符合接口的特性定义。
- 抽象类是无法创建实例的,即无法new
- 抽象类中的方法也是抽象的且子类必须override
接口中的方法虽然简单,但是可以同时予以多个类继承,如常用的IEnumerator接口。
虚方法的重写父类方法其实没什么限制只有如下几点:
virtual修饰符不能与private、static、abstract、override修饰符同时使用。
override修饰符不能与new 、static、virtual修饰符同时使用
并且重写方法只能用于重写基类中的虚方法。
而抽象类的子类方法是需要自己通过书写方法体实现的且必须重写(除非子类也是一个抽象类)。
抽象类的实际运用可观看一些小程序。
感谢阅读。