抽象方法和虚方法有什么区别?请举例说明。

(1)区别:

抽象方法:只有方法名称,没有方法体(也就是没有具体实现),子类必须重写父类的抽象方法

虚函数:该方法由方法体,但是子类可以覆盖,也可以不覆盖

虚方法有方法体,抽象方法没有方法体。抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化

抽象方法只能在抽象类中声明,虚方法不是

派生类必须重写抽象类中的抽象方法,虚方法则不必要

 

(2)抽象方法:只在抽象类中定义,方法修饰符不能使用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;

p.study();

}

}

抽象方法只能声明在抽象类中,使用关键字abstract

抽象类中的抽象方法必须被子类重写

抽象方法没有方法体,子类必须重写方法体,因此抽象方法可以看成是一个没有方法体的虚方法

(3)虚方法:使用virtual修饰的方法,虚方法可以有方法体

virtual修饰符不能与private static abstract override 修饰符同时使用

override修饰符 不能与new static virtual同时使用,并且重写方法只能用于重写基类中的虚方法。

public class BaseClass

{

public virtual string GetName()

{

return 父类虚方法体;

}

}

public class SubClass:BaseClass

{

public override string GetName()

{

return 重写父类虚方法;

}

}

父类中的虚方法被派生类重写了

*虚方法的限制:

虚方法仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数

静态成员函数,内联函数 ,构造函数不能是虚函数

析构函数可以是虚函数

猜你喜欢

转载自blog.csdn.net/lmm0513/article/details/88945605