VB.net понимание абстрактного класса - PullRequest
0 голосов
/ 28 декабря 2011

Если у меня есть класс с именем A и класс с именем B, если B наследует A, это означает, что A является суперклассом, а B является подклассом. Меня попросили описать, почему класс A не является абстрактным классом, но, как я вижу, класс A является абстрактным классом A, так как он был создан для использования классом B в будущем. возможность доступа к полям в классе 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 ]

3 голосов
/ 28 декабря 2011

Чтобы быть абстрактным, класс A должен иметь ключевое слово MustInherit.

Abstract (MustInherit) означает, что этот класс служит только базовым классом и не может быть создан с помощью New.Это также позволяет вам объявлять абстрактные (MustInherit) члены без реализации, то есть без тела метода.Затем наследуемые классы должны переопределять абстрактные члены и предоставлять реализацию, если только они сами не являются абстрактными (тогда третий уровень производных классов мог бы обеспечить реализацию).

Обратите внимание, что вам разрешено вызывать абстрактный член.Во время выполнения будет вызвана реализация фактического реализующего класса.

См .: MustInherit (Visual Basic)

Члены являются закрытыми, если не указано иное.Укажите для них Protected, чтобы классы-потомки могли их видеть, или Public, чтобы "все" могли их видеть.

См .: Уровни доступа в 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
0 голосов
/ 28 декабря 2011

А не является абстрактным. Абстрактный означает, что вы не можете создать экземпляр класса. Это означает, что вы ДОЛЖНЫ наследовать его.

Используйте ключевое слово abstract, чтобы сделать класс абстрактным. Вы также можете сделать методы абстрактными.

Если вы хотите, чтобы B видел определенные методы в A, но не кому-либо еще, используйте защищенное ключевое слово.

Извините, VB использует ключевые слова MustInherit и MustOverride.

...