VB.net抽象类的理解

时间:2011-12-28 16:21:32

标签: vb.net abstract-class

如果我有一个名为A的类和一个名为B的类,如果B继承A,则意味着A是超类,B是子类。我被要求描述为什么A类不是一个抽象类,但是我看到它是一个抽象类A,因为它是为将来使用的B类创建的,它是否与B类有关而不是能够访问A类中的字段,因为它们默认是私有的吗?

A类看起来像这样

Public Class A
 StartDate As Date
 Men As Integer
 Place As String

 Public Sub New()
 StartDate = Today
 Men = 0
 Place = ""
 End Sub

End Class

B类看起来像这样

 Public Class B inherits Class A

       Grade As ExamGrade

       Public Sub New()
       MyBase.New
       StartDate = Today
       Men = 0
       Place = ""
       Grade = 'Easy'
       End Sub

       Public Function setGrade(grade As String)
          ExamGrade = grade
       End Function
End Class

2 个答案:

答案 0 :(得分:3)

为了成为抽象类,A必须具有MustInherit关键字。

Abstract(MustInherit)表示此类仅用作基类,不能使用New进行实例化。它还允许您声明没有实现的抽象(MustInherit)成员,即没有方法体。然后,继承类必须覆盖抽象成员并提供实现,除非它们本身是抽象的(其中第三级派生类将提供实现)。

请注意,您可以调用抽象成员。在运行时,将调用实际实现类的实现。

请参阅:MustInherit (Visual Basic)

如果没有另外说明,会员是私人的。将它们指定为Protected以允许后代类查看它们,或将Public指定为允许“所有人”查看它们。

请参阅:Access Levels in Visual Basic

Public MustInherit Class A
    Protected StartDate As Date
    Protected Men As Integer
    Protected Place As String

    Public Sub New()
        StartDate = Today
        Men = 0
        Place = ""
    End Sub

End Class

Public Class B
    Inherits A

    Public Grade As String

    Public Sub New()
        MyBase.New() 'This initializes StartDate, Men and Place
        Grade = "Easy"
    End Sub

    Public Sub SetGrade(ByVal grade As String)
        Me.Grade = grade
    End Sub
End Class

答案 1 :(得分:0)

A不是抽象的。抽象意味着您无法实例化该类。这意味着你必须继承它。

使用abstract关键字使类成为抽象。你也可以把方法抽象化。

如果您希望B在A中查看某些方法,而不是其他任何人,请使用protected keyword。

抱歉,VB使用MustInherit和MustOverride关键字。