Среди классов выделяются базовые или абстрактные классы. Мы не можем создать объект или экземпляр абстрактного класса. Основное его назначение - предоставить базовый функционал для других классов-наследников. При определении абстрактных классов используется ключевое слово 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