相同点:
虚方法(virtual)和抽象方法(abstract)都可以被派生类重写
不同点:
1.虚方法(virtual)有方法实体,抽象方法(abstract)没有方法实体【类似接口】
virtual void SayWord()
{
//代码
}
abstract void SayWord();
{
//代码
}
abstract void SayWord();
abstract class Person
{
abstract void SayName();
}
class Man:Person
{
override void SayName()
{
//方法实体
}
}
{
abstract void SayName();
}
class Man:Person
{
override void SayName()
{
//方法实体
}
}
下面给出实例代码:
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat("小花","2");
cat.Eat();
//调用父类中的虚方法,如果派生类中重写则调用重写后的
cat.ShowName();
Console.ReadKey();
//最后输出结果是:
猫吃东西
我的名字是小花,今年2岁了
}
}
public abstract class Animal
{
protected string name;
public string Name
{
get { return name; }
set { name = value; }
}
protected string age;
public string Age
{
get { return age; }
set { age = value; }
}
/// <summary>
/// 虚方法
/// </summary>
public virtual void ShowName()
{
Console.WriteLine("我的名字是{0},今年{1}岁了", this.name,this.age);
}
/// <summary>
/// 抽象方法
/// </summary>
public abstract void Eat();
}
public class Cat : Animal
{
/// <summary>
/// 派生类必须重写父类中的抽象方法,否则会报错
/// </summary>
public override void Eat()
{
Console.WriteLine("猫吃东西");
}
public Cat(string name, string age)
{
this.name = name;
this.age = age;
}
}
{
static void Main(string[] args)
{
Cat cat = new Cat("小花","2");
cat.Eat();
//调用父类中的虚方法,如果派生类中重写则调用重写后的
cat.ShowName();
Console.ReadKey();
//最后输出结果是:
猫吃东西
我的名字是小花,今年2岁了
}
}
public abstract class Animal
{
protected string name;
public string Name
{
get { return name; }
set { name = value; }
}
protected string age;
public string Age
{
get { return age; }
set { age = value; }
}
/// <summary>
/// 虚方法
/// </summary>
public virtual void ShowName()
{
Console.WriteLine("我的名字是{0},今年{1}岁了", this.name,this.age);
}
/// <summary>
/// 抽象方法
/// </summary>
public abstract void Eat();
}
public class Cat : Animal
{
/// <summary>
/// 派生类必须重写父类中的抽象方法,否则会报错
/// </summary>
public override void Eat()
{
Console.WriteLine("猫吃东西");
}
public Cat(string name, string age)
{
this.name = name;
this.age = age;
}
}
本文详细对比了虚方法(virtual)与抽象方法(abstract)的相同点与不同点,包括方法实体的存在与否、是否必须在派生类中重写以及抽象方法必须声明在抽象类中的特性,并通过实例代码加以说明。
245

被折叠的 条评论
为什么被折叠?



