抽象方法和虚拟方法有什么区别?在哪些情况下,建议使用抽象方法或虚拟方法?哪一种是最好的方法?


当前回答

必须始终重写抽象函数。

因此:

抽象函数-当继承者必须提供自己的实现时虚拟-由继承人决定

其他回答

抽象函数不能有主体,必须由子类重写

虚函数将有一个主体,并且可以或不可以被子类重写

当您希望继承者根据需要扩展功能时,基本上可以使用虚拟方法。

当您希望继承者实现功能时,可以使用抽象方法(在这种情况下,他们别无选择)

虚拟方法:

虚拟意味着我们可以超越它。虚拟函数有一个实现。当我们继承类时可以重写虚拟函数并提供我们自己的逻辑。我们可以在实现子类中的函数(可以说是阴影)。

抽象方法

抽象意味着我们必须重写它。抽象函数没有实现,必须在抽象类中。它只能声明。这迫使派生类提供它的实现。抽象成员是隐式虚拟的。在某些语言中,抽象可以称为纯虚拟。公共抽象类BaseClass{ 受保护的抽象void xAbstractMethod();公共虚拟void xVirtualMethod(){变量x=3+4;}}

从面向对象的常规视图:关于抽象方法:当你把一个抽象方法放在父类中时,实际上你在对子类说:嘿,注意你有一个这样的方法签名。如果你想使用它,你应该实现你自己的!关于虚拟函数:当你在父类中放置一个虚拟方法时,你会对派生类说:嘿,这里有一个功能可以为你做些什么。如果这对你有用,就使用它。如果没有,重写它并实现你的代码,甚至你可以在代码中使用我的实现!这是关于通用OO中这两个概念之间不同的一些哲学

抽象方法总是虚拟的。它们无法实现。

这是主要的区别。

基本上,如果您有一个虚拟方法的“默认”实现,并且希望允许后代更改其行为,那么您将使用该方法。

使用抽象方法,可以强制后代提供实现。