Abstract
 
声明抽象方法

语法

Type typename Extends base_typename
End Type

说明

AbstractVirtual的特殊形式。不同的是,抽象方法没有一个正文,只是声明。本质上,这允许声明可以通过各种派生类型实现的接口。

为了调用抽象方法,它必须被派生数据类型覆盖并实现,否则程序将中止。
因此,只有实现所有抽象方法的类型才允许创建对象。出于同样的原因,构造函数不应该调用未实现的方法。

构造函数不能抽象,因为它们不能是虚拟的。此外,抽象析构函数也不受支持,因为需要析构函数体(无论是隐式还是显式),以调用基础和字段析构函数。

摘要在C ++中被称为“纯虚拟”(与FreeBASIC不同,C ++允许纯虚拟机拥有一个主体,只能静态访问)。

注意:在多级继承中,在每个继承层次结构级别,可以将相同的命名方法(相同的标识符和签名)声明为Abstract,Virtual或normal(无说明符)。 当混合说明符时,通常的顺序是从继承层次结构的上到下的抽象 - >虚拟 - >正常。
内部多态性进程不考虑覆盖方法的访问控制(Public/ Protected/ Private),而仅在编译时对初始调用进行考虑。
派生静态方法不能覆盖基本的虚拟/抽象方法,但可以影响任何基本方法(包括虚拟/抽象)。

例子

Type Hello extends object
    Declare abstract Sub hi( )
End Type

Type HelloEnglish extends Hello
    Declare Sub hi( )
End Type

Type HelloFrench extends Hello
    Declare Sub hi( )
End Type

Type HelloGerman extends Hello
    Declare Sub hi( )
End Type


Sub HelloEnglish.hi( )
    Print "你好!"
End Sub

Sub HelloFrench.hi( )
    Print "干杯!ca"
End Sub

Sub HelloGerman.hi( )
    Print "您好!"
End Sub


    Randomize( Timer( ) )

    Dim As Hello Ptr h

    For i As Integer = 0 To 9
        Select Case( Int( Rnd( ) * 3 ) + 1 )
        Case 1
            h = New HelloFrench
        Case 2
            h = New HelloGerman
        Case Else
            h = New HelloEnglish
        End Select

        h->hi( )
        Delete h
    Next

方言差异

与QB差别

  • 新的FreeBASIC

参考