如果我有一个名为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
答案 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关键字。