2011-12-28 55 views
0

如果我有一個名爲A的類和一個名爲B的類,如果B繼承了A,那意味着A是超類,B是子類。我被要求描述爲什麼A類不是一個抽象類,但是因爲我看到A類是一個抽象類A,因爲它已經爲B類在未來使用而創建,它與B類不是關係能夠訪問類A中的字段,儘管它們默認爲私有的?VB.net抽象類理解

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 
+1

的[這](http://en.wikipedia.org/wiki/Abstract_type)維基百科可能會給你一個提示,一個很大的區別 –

回答

2

爲了成爲抽象類,A必須有MustInherit關鍵字。如果沒有另行指定,成員是私人的。如果只有後代類可以看到它們,則指定它們爲Protected;如果「所有人」可能看到它們,則指定它們爲Public

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

感謝Olivier,這是有道理的,所以如果他們是公共的或者受保護的類B可以從類A繼承它們,如果它們是私有的,它不可以,它的類A必須包含MustInherit。 – user445714

+0

MustInherit僅在您不想允許某人使用'New'創建類時才需要。如果一個類是抽象的,你也可以指定方法爲'MustOverride',從而強制派生類實現它們。 –

0

A不是抽象的。抽象意味着你不能實例化類。這意味着你必須繼承它。

使用抽象關鍵字使類抽象。你也可以使方法抽象。

如果您希望B查看A中的某些方法,但不能查看其他任何人,請使用受保護的關鍵字。

對不起,VB使用MustInherit和MustOverride關鍵字。

+0

爲什麼**「必須」 **,你繼承了第一行從抽象類? –

+0

http://msdn.microsoft.com/en-us/library/k535acbf(v=vs.71).aspx –

+0

這是我的問題的答案? –