一,直接上代码,后总结:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Demo { class Program { static void Main(string[] args) { Testvirtual Tv = new Testvirtual(); Tv.Say(); Tv.CommonMethod(); Instanvirtual Iv = new Instanvirtual(); Iv.Say(); //Testabstract Ta = new Testabstract(); //提示错误:无法创建抽象类或接口的实例 Testabstract Ta = new Instanabstract(); Ta.Say(); Ta.SayVir(); //而抽象类中存在虚方法则不必需在派生类(子类)中重写,因为虚方法本身有声明主体,所以一样可以输出 Console.ReadKey(); } } public class Testvirtual { public virtual void Say() { Console.WriteLine("虚方法"); } public void CommonMethod() { Console.WriteLine("一般方法"); } } public class Instanvirtual : Testvirtual { public override void Say() { Console.WriteLine("重写虚方法"); } //这个如果父类一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写 //public override void CommonMethod() //{ // Console.WriteLine("重写一般方法"); //} } public abstract class Testabstract //定义抽象方法,必须在抽象类中 { // public abstract void Test() { //如果这样会会提示:无法声明主体,因为它标记为abstract,并且提示不实现继承的抽象成员 // Console.WriteLine("抽象方法"); //} public virtual void SayVir() { Console.WriteLine("抽象类的虚方法"); } public abstract void Say(); public void CommonMethod() { } } public class Instanabstract : Testabstract { public override void Say() { Console.WriteLine("重写抽象方法"); } //这个如果父类一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写 //public override void CommonMethod() { //Console.WriteLine("重写一般方法"); //} } }
综上总结出:如果一般方法没有使用virtual,abstract关键字,则会提示没有找到适合的方法来重写,
一,抽象方法:
1,抽象方法必须在抽象类中定义
2,抽象方法必须在派生类(子类)中实现
3,抽象类中的抽象方法无法声明主体,因为它标记为abstract
4,无法创建抽象类或接口的实例
二,虚方法
1,虚方法不必须在派生类(子类)中重写实现
2,虚方法声明方法实体
3,可以创建虚方法类的实例
4,如果抽象类中有虚方法,不必须在派生类(子类)中重写,如上代码调用实现