如果我有一个名为A的类和一个名为B的类,如果B继承A,则意味着A是超类,B是子类。我被要求描述为什么类 A 不是抽象类,但据我所知,类 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
为了成为抽象类,A 类必须具有
MustInherit
关键字。
Abstract (
MustInherit
) 表示该类仅作为基类,不能用 New
实例化。它还允许您声明没有实现的抽象 (MustOverride
) 成员,即没有方法体。然后,继承类必须重写抽象成员并提供实现,除非它们本身是抽象的(其中第三层派生类将提供实现)。
请注意,您可以调用抽象成员。在运行时,将调用实际实现类的实现。
如果没有另外指定,成员是私有的。将它们指定为
Protected
以允许后代类看到它们,或 Public
以允许“每个人”看到它们。
Public MustInherit ClassA
Protected StartDate As Date
Protected Men As Integer
Protected Place As String
Public Sub New()
StartDate = Today
Men = 0
Place = ""
End Sub
Public MustOverride Sub Print()
End Class
Public ClassB
Inherits ClassA
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
Public Overrides Sub Print()
Console.WriteLine($"Grade = {Grade}")
End Sub
End Class
现在,你可以像这样使用它了
Sub Test(ByVal a As ClassA)
a.Print()
End Sub
您可以通过传递一个
Test
对象来调用 ClassB
。
A不是抽象的。抽象意味着您无法实例化该类。这意味着你必须继承它。
使用abstract关键字使类抽象。您也可以使方法抽象。
如果您希望 B 看到 A 中的某些方法,但不让其他人看到,请使用 protected 关键字。
抱歉,VB 使用 MustInherit 和 MustOverride 关键字。