相同点:
虚方法(virtual)和抽象方法(abstract)都可以被派生类重写
不同点:
1.虚方法(virtual)有方法实体,抽象方法(abstract)没有方法实体【类似接口】
virtual void SayWord() { //代码 } abstract void SayWord();
2.虚方法(virtual)在派生类中可以不重写,抽象方法(abstract)派生类中必须重写【类似接口】
abstract class Person { abstract void SayName(); } class Man:Person { override void SayName() { //方法实体 } }
3.抽象方法(abstract)必须声明在抽象类中
下面给出实例代码:
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; } }
|
请发表评论