抽象方法和虚拟方法有什么区别?在哪些情况下,建议使用抽象方法或虚拟方法?哪一种是最好的方法?
当前回答
当您希望继承者根据需要扩展功能时,基本上可以使用虚拟方法。
当您希望继承者实现功能时,可以使用抽象方法(在这种情况下,他们别无选择)
其他回答
必须始终重写抽象函数。
因此:
抽象函数-当继承者必须提供自己的实现时虚拟-由继承人决定
抽象函数或方法是由类公开的公共“操作名称”,其目的与抽象类一起,主要是在对象设计中针对对象必须实现的结构提供一种形式的约束。
事实上,从其抽象类继承的类必须为该方法提供一个实现,通常编译器在不实现时会引发错误。
使用抽象类和方法非常重要,主要是为了避免在设计类时关注实现细节,从而导致类结构与实现过于相关,从而在它们之间协作的类之间创建依赖关系和耦合。
虚拟函数或方法只是一种模拟类的公共行为的方法,但我们可以在继承链中自由修改它,因为我们认为子类可能需要为该行为实现一些特定的扩展。
它们都代表了面向对象范式中的一种多元化。
我们可以一起使用抽象方法和虚拟函数来支持一个好的继承模型。
我们为解决方案的主要对象设计了一个很好的抽象结构,然后通过定位那些更易于进一步专门化的对象来创建基本实现,我们将这些对象作为虚拟对象,最后我们专门化我们的基本实现,最终“覆盖”继承的虚拟对象。
抽象函数不能具有功能。你基本上是说,任何子类都必须给出自己版本的这个方法,但是它太通用了,甚至无法在父类中实现。
一个虚拟函数,基本上就是说,看,这里的功能对于子类来说可能不够好,也可能不够好。因此,如果它足够好,请使用此方法,如果不好,请重写我,并提供您自己的功能。
抽象函数:
它只能在抽象类中声明。它只包含方法声明不是抽象类中的实现。它必须在派生类中重写。
虚拟功能:
它可以在抽象类和非抽象类中声明。它包含方法实现。它可能被覆盖。
抽象函数不能有主体,必须由子类重写
虚函数将有一个主体,并且可以或不可以被子类重写