Среди классов выделяются базовые или абстрактные классы. Мы не можем создать объект или экземпляр абстрактного класса. Основное его назначение - предоставить базовый функционал для других классов-наследников. При определении абстрактных классов используется ключевое слово MustInherit:
Public MustInherit Class Car End Class
Зачем нужны абстрактные классы? Допустим, мы разрабатываем программу для банка. В нашей программе мы можем определить три класса:
Person, который описывает человека, Employee, который описывает сотрудника банка, и класс Client,
который будет представлять клиента банка. Очевидно, что классы Employee и Client будут производными от класса Person.
И так как все объекты будут представлять либо сотрудника банка, либо клиента, то напрямую мы от класса Person создавать объекты не будем.
Поэтому имеет смысл сделать его абстрактным.
Абстрактный класс похож на обычный класс. Он также может иметь переменные, методы, конструкторы, свойства. Только от него напрямую нельзя образовывать объекты. Он представляет лишь базовый функционал, который потом реализуется в производных классах. Кроме того, абстрактный класс в отличие от обычных классов может содержать абстрактные методы и свойства. Такие методы и свойства помечаются ключевым словом MustOverride и не имеют никакой реализации:
Public MustOverride Sub Display()
При этом производный класс обязан переопределить и реализовать все абстрактные методы и свойства,
которые имеются в базовом классе. Также следует учесть, что если класс имеет хотя бы одно абстрактное свойство или метод, то он должен быть определен как
абстрактный. Теперь изменим нашу структуру классов и определим в ней абстрактный класс Person, в котором будет абстрактный метод
Display:
Public MustInherit Class Person
Public Property FirstName() As String
Public Property LastName() As String
'Абстрактный метод
Public MustOverride Sub Display()
Public Sub New(fName As String, lName As String)
FirstName = fName
LastName = lName
End Sub
End Class
Public Class Employee
Inherits Person
Public Property Bank As String
Public Overrides Sub Display()
Console.WriteLine(FirstName & " " & LastName & " works in " & Bank)
End Sub
Public Sub New(fName As String, lName As String, _bank As String)
MyBase.New(fName, lName)
Bank = _bank
End Sub
End Class
Public Class Client
Inherits Person
Public Property Bank As String
Public Overrides Sub Display()
Console.WriteLine(FirstName & " " & LastName & " has an account in bank" & Bank)
End Sub
Public Sub New(fName As String, lName As String, _bank As String)
MyBase.New(fName, lName)
Bank = _bank
End Sub
End Class