ПОНЯТНО О Visual Basic NET (том 3)


Наследование - часть 3


    Inherits

clsПрямоугольник

    Public Высота As Integer

 

    Public Function Площадь_поверхности() As Integer

        Return 2 * Площадь() + Периметр() * Высота

    End Function

End Class

Вы видите, что каждый из наследников имеет 3 поля: длину, ширину и высоту – и умеет вычислять площадь и периметр. Проверим работу классов, нажав кнопку на форме:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Прямоугольник As New clsПрямоугольник

        Прямоугольник.Длина = 10

        Прямоугольник.Ширина = 5

        Debug.WriteLine(Прямоугольник.Площадь)

        Debug.WriteLine(Прямоугольник.Периметр)

        Dim Параллелепипед As New clsПараллелепипед

        Параллелепипед.Длина = 4

        Параллелепипед.Ширина = 3

        Параллелепипед.Высота = 2

        Debug.WriteLine(Параллелепипед.Площадь)

        Debug.WriteLine(Параллелепипед.Периметр)

        Debug.WriteLine(Параллелепипед.Объем)

        Dim Коробка As New clsКоробка

        Коробка.Длина = 3

        Коробка.Ширина = 2

        Коробка.Высота = 100

        Debug.WriteLine(Коробка.Площадь)

        Debug.WriteLine(Коробка.Периметр)

        Debug.WriteLine(Коробка.Площадь_поверхности)

    End Sub

Вот что будет напечатано:

50

30

12

14

24

6

10

1012

Обратите внимание, что наследуются переменные величины в классах, а не их конкретные значения в объектах. Так, значение длины прямоугольника никак не влияет на значение длины коробки.

Внуки. У детей, как я уже говорил, могут быть свои дети. Так, у класса clsКоробка могут быть наследники: Гараж, Чемодан и др. Все они наследуют у родителя – класса clsКоробка – высоту и площадь поверхности, а у дедушки – класса clsПрямоугольник – длину, ширину, площадь и периметр. Факт наследования объявляется аналогично:

Public Class clsГараж

    Inherits

clsКоробка

Область видимости Protected. Если какой-нибудь компонент родительского класса объявлен Private, то у наследника не будет доступа к этому компоненту. Когда такой доступ нужен, компонент рекомендую объявлять Protected. В этом случае он будет доступен наследникам, но только им. Пример проекта:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Наследник As New clsНаследник

        Debug.WriteLine(Наследник.Фн)

End Sub

Public Class clsРодитель

    Protected А As Integer = 100

    Private B As Integer = 200

    Protected Function Ф() As Integer

        Return   B + 1   

    End Function

End Class

Public Class clsНаследник

    Inherits clsРодитель

    Public Function Фн() As Integer

        Return   Ф + А

    End Function

End Class

Проект напечатает

301

Если бы мы объявили так:

    Private А

As Integer = 100

    Private Function Ф() As Integer

то в строке

        Return   Ф + А

были бы подчеркнуты и Ф, и А, поскольку ни переменная, ни функция были бы недоступны.




Начало  Назад  Вперед