|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Van klassen die met het MustInherit keyword zijn gemarkeerd is overerving als het ware verplicht. "Verplicht" is het in de zin dat je geen instantie kan creëren van dergelijke abstracte klasse, maar je slecht iets kan doen met de members van die abstracte klasse indien je van die klasse gaat overerven. Het is enkel mogelijk om instanties te creëren van concreet ( dus niet abstracte ) afgeleide types van dit abstracte type.
Dergelijke constructie is dus nuttig in geval van een generalisatietype die zelf een eerder abstract concept omschrijft waarvan zelf geen objecten gemaakt moeten worden. Het zal uiteraard enkel nuttig zijn wanneer men beschikt over een concreet afgeleid type.
In een systeem hebben we bijvoorbeeld nood aan figuren als rechthoeken en cirkels. Alle soorten van figuren hebben een bepaalde kleur. Een generalisatietype als Figure met de gemeenschappelijke kenmerken ( zoals Color ) en gemeenschappelijk gedrag voor alle figuren zou hier dus nuttig zijn. Maar omdat er in ons systeem niet zoiets is als "een gewone figuur", maar het altijd om specifieke soorten van figuren gaat, kunnen we beter de Figure klasse abstract ( MustInherit ) maken. Dit voorkomt dat we in een client objecten van dit type zouden maken. Onderstaande regel (1) kan dus niet en zou een compileerfout veroorzaken. Visual Basic 2010 Broncode MustInherit Class Figure Private m_Color As String Public Property Color() As String Get Color = m_Color End Get Set( ByVal value As String) m_Color = value End Set End PropertyEnd ClassClass Rectangle : Inherits Figure Private m_Height As Double Public Property Height() As Double Get Height = m_Height End Get Set( ByVal value As Double) m_Height = value End Set End Property Private m_Width As Double Public Property Width() As Double Get Width = m_Width End Get Set( ByVal value As Double) m_Width = value End Set End PropertyEnd ClassClass Circle : Inherits Figure Private m_Radius As Double Public Property Radius() As Double Get Radius = m_Radius End Get Set( ByVal value As Double) m_Radius = value End Set End PropertyEnd ClassClass Example Public Shared Sub Main() Dim rectangle1 As Rectangle = New Rectangle Dim circle1 As Circle = New Circle End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Aan de overgeërfde eigenschap Color kunnen in de gespecialiseerde types nog gespecialiseerde eigenschappen als Height, Width of Radius bijvoorbeeld worden toegevoegd.
Abstracte klassen kunnen ook worden overgeërfd door andere abstracte klassen. Maar ook met deze afgeleide abstracte klassen zul je weinig zijn zolang je daarvan geen concrete klassen laat overerven. Een klasse die niet geïnstantieerd kan worden is uiteraard slechts nuttig door de members ervan over te nemen in een concreet afgeleid type waarvan je wel een instantie kunt creëren.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|