progs.biz  
Начало>VB.NET>Основы>Урок 14
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Б. Ивьен и др. Visual Basic .NET. Библия пользователя
Б. Ивьен и др. Visual Basic .NET. Библия пользователя
Заказать на Озоне



Яндекс-цитирования

Основы VB.NET
Урок 14. Абстрактные классы

Часто мы имеем такую ситуацию - есть иерархия классов, и в каждом классе-потомке есть метод, который выполняет одно и то же действие. Но во всех класса-потомках это действие выполняется по-разному. В этом случае мы объявляем этот метод в классе-предке, но реализацию этого метода в классе-предке мы не пишем (а пишем отдельно в каждом классе-потомке). Класс-предок при этом мы объявляем как абстрактный. Создавать экземпляры такого класса нельзя - он используется только как предок для других классов в иерархии.

Поясним сказанное на примере. В этом примере есть класс Figure (геометрическая фигура). В нем есть метод Perim - для подсчета периметра фигуры. Понятно, что общей форулы для периметра нет (разве что через интеграл ;)) - для одной геометрической фигуры будет одна формула, для другой - другая. Поэтому мы объявляем наш класс Figure как абстрактный (с помощью ключевого слова MustInherit), а его метод Perim объявляем в классе без реализации (это делаем через ключевое слово MustOverride). Далее заводим два класса-потомка (Square (квадрат) и Rectangle (прямоугольник)), в которых и пишем реализацию метода Perim:

'Объявляем абстрактный класс
MustInherit Class Figure
    Public MustOverride Function Perim() As Double
End Class
'Класс Square - потомок класса Figure
Class Square
    Inherits Figure
    'Сторона квадрата
    Public a As Double
    'Конструктор
    Public Sub New(ByVal a1 As Integer)
        a = a1
    End Sub
    'Реализуем метод Perim
    Public Overrides Function Perim() As Double
        Return a * 4
    End Function
End Class
'Класс Rectangle - потомок класса Figure
Class Rectangle
    Inherits Figure
    'Стороны прямоугольника
    Public a As Double, b As Double
    'Конструктор
    Public Sub New(ByVal a1 As Integer, ByVal b1 As Integer)
        a = a1
        b = b1
    End Sub
    'Реализуем метод Perim
    Public Overrides Function Perim() As Double
        Return (a + b) * 2
    End Function
End Class

Обратите внимание, что метод Perim() мы объявили в родительском классе с ключевым словом MustOverride, а пишем его реализацию в дочених классах с ключевым словом Overrides.

Применить наши классы можно так:

Class Test
    Public Shared Sub Main()
        'Объявляем массив
        Dim p(2) As Figure
        p(0) = New Square(2)
        p(1) = New Rectangle(2, 3)
        Console.WriteLine(p(0).Perim())
        Console.WriteLine(p(1).Perim())
    End Sub
End Class

Видите - тут мы объявили массив из переменных типа родительского класса Figure. Далее мы в нулевой элемент массива записываем новый экземпляр класса Square, а в первый элемент - экземпляр класса Rectangle. Далее идет самое важное - мы вызываем метод Perim и выполняется конкретная реализация этого метода (или из класса Square, или из класса Rectangle). Выведет эта программа, естественно, 8 и 10.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев