抽象和虚拟相同的含义?

时间:2011-01-06 09:36:17

标签: oop language-agnostic terminology

根据不同的语法和可以使用的地方,它们似乎都非常密切相关。有哪些主要区别?

2 个答案:

答案 0 :(得分:7)

abstract意味着派生类被强制实现它,而虚拟则不是这种情况(它可以但不是必需的)。这源于这样一个事实:抽象方法在虚拟方法的同时没有关联体。

答案 1 :(得分:0)

通过将成员定义为抽象,您将定义一种占位符,而不提供任何默认实现。与基类交互的任何客户端代码仍然可以引用抽象占位符成员,在知道实例的具体类必须提供具体实现的情况下是安全的。

通过将成员定义为虚拟,您可以启用派生类以提供将覆盖基类的实现。不同之处在于,如果派生类没有提供自己的实现,那么将使用基类中的实现。

考虑以下C#示例类:

abstract class TaskBase {
    public abstract void RunTask();
}

class RoadNetwork {
    public string GetCorrectSideToDriveOn() { return "left"; }
}

TaskBase类的设计强制派生类提供自己的RunTask()实现,因为如果没有它,代码将无法编译。设计师实际上是在说“任务必须是可运行的,但你必须提供实现,因为没有有意义的默认值。”

RoadNetwork课程的设计工作方式不同:任何实施RoadNetwork的人都会自动使用正确的路面开车,除非他们特意选择在错误的一侧开车;)