虚拟的和抽象的
虚拟和抽象是大多数面向对象编程语言(如Java和c#)中使用的两个关键字。尽管在不同的语言中它的含义有细微的差别,Virtual和Abstract关键字都为它所附加的实体提供了部分实现的感觉。
摘要
通常,抽象类,也被称为抽象基类(ABC),不能被实例化(该类的实例不能被创建)。因此,抽象类只有在编程语言支持继承(从扩展类创建子类的能力)的情况下才有意义。抽象类通常表示部分实现或不实现的抽象概念或实体。因此,抽象类作为派生子类的父类,因此子类将共享父类的不完整特性,并且可以添加功能来完成它们。抽象类可以包含抽象方法。继承抽象类的子类可以实现这些(继承的)抽象方法。如果子类实现了所有这些抽象方法,那么它就是一个具体类。但如果没有,子类也会变成一个抽象类。这一切意味着,当程序员将一个类指定为抽象类时,她是在说这个类将是不完整的,它将有需要由继承的子类完成的元素。这是在两个程序员之间创建契约的好方法,它简化了软件开发中的任务。 The programmer, who writes code to inherit, needs to follow the method definitions exactly (but of course can have her own implementation). In Java and C#, Abstract classes and methods are declared using Abstract keyword.
虚拟
虚方法/函数提供了通过继承类(使用具有相同签名的函数)有选择地重写其行为的能力。虚函数的概念在下面的场景中很重要。假设一个类是由子类派生的,那么每当使用派生类的对象时,它可以引用基类的对象或派生类的对象。但是,如果基类方法被重写,方法调用行为可能是二义性的。因此,为了解决这种模糊性,使用了Virtual关键字。如果该方法被标记为Virtual,则调用派生类的函数(如果有的话),否则调用基类的函数。例如,在c++中,Virtual关键字就是为此目的而使用的。在c#中,Virtual关键字以类似的方式使用,但除此之外,关键字override应该用于修改所有被重写的方法。但是在Java中,没有显式的Virtual关键字。所有非静态方法都被认为是Virtual。 Virtual functions with no body are called Pure Virtual functions. In Java and C#, Abstract methods are in fact Pure Virtual.
虚拟与抽象的区别
尽管Abstract和Virtual是两个关键字/概念,它们为相关实体提供了不完整实现的含义,但它们确实有它们的区别。抽象方法(必须在抽象类内部定义)根本没有实现,而虚方法可能有实现。如果抽象方法被一个具体的类扩展,那么所有继承的抽象方法都必须被实现,而继承的虚方法可能被重写,也可能不被重写。
留下一个回复